The index.html
file containing JavaScript that makes use of the
Contact Database API functionality is listed below.
<!DOCTYPE html> <html manifest="manifest.appcache"> <head> <title>Contact example</title> <link rel="x-antenna-managed-webapp-descriptor" href="webapp-descriptor.xml" /> <script type="text/javascript"> function printText(str) { var d = document.getElementById('text-box'); d.appendChild(document.createTextNode(str)); d.appendChild(document.createElement('br')); d.scrollTop = d.scrollHeight; }; function saveContact() { var name = document.getElementById('name2').value; var Fname = document.getElementById('Fname').value; var email = document.getElementById('email').value; var telH = document.getElementById('telH').value; var telW = document.getElementById('telW').value; var newContact = { readOnly: true, name: [name], honorificPrefix: ["honorificPrefix"], givenName: [name], // {String[]} Only the first item is supported on Android/iOS. additionalName: ["additionalName"], // {String[]} Only the first item is supported on Android/iOS. familyName: [Fname], // {String[]} Only the first item is supported on Android/iOS. honorificSuffix: ["honorificSuffix"], nickname: ["nickname"], // {String[]} Only the first item is supported on Android/iOS. email: [ {value: email, type: "work"}, {value: '[email protected]', type: "home"} ], // {ContactField[]} //photo, // {String[]} Data URI, only the first item is supported on Android/iOS. // Also, on iOS thumbnails are returned for performance reasons. url: [ {value: 'http/google.com', type: "work"}, {value: 'http://onet.pl', type: "home"} ], // {ContactField[]} //categories, // {String[]} Not Supported adr: [ {type: "work", streetAddress: "streetAddress", postalCode: "11-222" }, {type: "home", streetAddress: "streetAddress2", postalCode: "11-333" } ], // {ContactAddress[]} tel: [ {type: "work", value: telW}, {type: "home", value: telH} ], // {ContactTelField[]} Carrier name is not supported on iOS. // {String[]} Only the first item is supported on Android/iOS. org: ["Organization"], // {String[]} Only the first item is supported on Android/iOS. jobTitle: ["jobTitle"] //sex, // {String} Not supported (no corresponding native field). //genderIdentity, // {String} Not supported (no corresponding native field). }; var callbacks = { onSuccess: function (contacts) { printText('Contacts: '); printText('success!'); }, onFailure: function (err) { printText("save onFailure called!"); printText(err.code); printText(err.description); } }; var contacts = launchbox.Contacts; contacts.save(newContact, callbacks); }; function removeContact() { var options = { filterValue: "job", filterOp: "contains", filterBy: ["jobTitle"], sortBy: "givenName", sortOrder: "ascending", filterLimit: 100 }; var removeCallbacks = { onSuccess: function (contact) { printText("remove onSuccess called!"); }, onFailure: function () { printText("remove onFailure called!"); } }; var findCallbacks = { onSuccess: function (contact) { window.launchbox.Contacts.remove(contact[0], removeCallbacks); }, onFailure: function () { printText("find onFailure called!"); } }; var contacts = launchbox.Contacts; contacts.find(options, findCallbacks); }; function clearText() { var d = document.getElementById('text-box'); d.innerHTML = ""; d.scrollTop = d.scrollHeight; }; function clearOutput() { var d = document.getElementById("text-box"); d.innerHTML = ""; }; function printContacts(contacts) { printText('--------------------'); for (i = 0; i < contacts.length; i++) { printText('Contact #' + i); printText('Name '); if (contacts[i].name) { printText(contacts[i].name); } else { printText(' - name not defined'); } printText('Phone numbers '); if (contacts[i].tel) { for (k = 0; k < contacts[i].tel.length; k++) { printText(contacts[i].tel[k].type + ' - ' + contacts[i].tel[k].value); document.createElement('br'); } } else { printText(' - no phone numbers'); } printText('E-mails '); if (contacts[i].email) { for (k = 0; k < contacts[i].email.length; k++) { printText(contacts[i].email[k].type + ' - ' + contacts[i].email[k].value); } } else { printText(' - no emails'); } } }; function findContact() { var options = { filterValue: "jobTitle", filterOp: "contains", filterBy: ["jobTitle"], sortBy: "givenName", sortOrder: "ascending", filterLimit: 100 }; var callbacks = { onSuccess: function (contact) { printText("find onSuccess called!"); printContacts(contact); }, onFailure: function () { printText("find onFailure called!"); } }; var contacts = launchbox.Contacts; contacts.find(options, callbacks); }; </script> </head> <body> <header> <h3><span>Contacts API usage example</span> </h3> </header> <p> <table border="0"> <tr> <td>Name:</td> <td><input type="text" name="name2" id="name2" size="38" maxlength="100" value="testName"></td> </tr> <tr> <td>Family Name:</td> <td><input type="text" name="Fname" id="Fname" size="38" maxlength="100" value="FamilyName"></td> </tr> <tr> <td>Email:</td> <td><input type="text" name="email" id="email" size="38" maxlength="100" value="[email protected]"></td> </tr> <tr> <td>Home Tel:</td> <td><input type="text" name="telH" id="telH" size="38" maxlength="100" value="123456789"></td> </tr> <tr> <td>Work Tel:</td> <td><input type="text" name="telW" id="telW" size="38" maxlength="100" value="987654321"></td> </tr> </table> </p> <input type="button" onclick="saveContact();" value="Add new Contact"/> <input type="button" onclick="findContact();" value="Find Contact"/> <input type="button" onclick="removeContact();" value="Remove Contact"/> <input type="button" onclick="clearText();" value="Clear text"/> <div id="text-box"></div> </body> </html>
The contents of the cache manifest file called manifest.appcache
for
this application are listed below:
CACHE MANIFEST CACHE: index.html NETWORK: *
The webapp-descriptor.xml
file for this application is defined in the
following way:
<?xml version="1.0" encoding="UTF-8"?> <webapp-descriptor xmlns="http://www.pega.com/application-hosting/ web-app-descriptor/2.0"> <id>com.pega.sample.Contacts</id> <version>1.0.0</version> <name>Contacts API usage example</name> </webapp-descriptor>