This document describes how to use the contact model for adding an Email field to a contact item using the Contacts API. The Email field can be further described through the use of field types. This document shows how to add the field types representing CELL, HOME and WORK. It also describes the role of the INTERNET type in the Email field.
The cntmodel provides the data engine for creating contact items that can contain fields. New fields can be added which can have fieldtypes and a mapping. The contact items can be import vCards and also export vCards. The cntvcard library provides the functionality to import and export vCards. The contact item mapping is associated with the properties of a vCard. The field type is typically associated with the type parameters of the property.
The following code snippet describes how to add a contact item with an email field and a CELL field type. The corresponding EMAIL property, if the contact item is exported, is also shown.
// Adds a contact item to the contact database. The important lines are in bold. LOCAL_C void AddEntryL() { _LIT(KForename,"John"); _LIT(KSurname,"Smith"); _LIT(KPhoneNumber,"+441617779700"); _LIT(KEmailAddress,"[email protected]"); // Create a contact card to contain the data CContactCard* newCard = CContactCard::NewLC(); // Create the firstName field and add the data to it CContactItemField* firstName = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldGivenName); firstName->TextStorage()->SetTextL(KForename); newCard->AddFieldL(*firstName); CleanupStack::Pop(firstName); // Create the lastName field and add the data to it CContactItemField* lastName= CContactItemField::NewLC(KStorageTypeText, KUidContactFieldFamilyName); lastName ->TextStorage()->SetTextL(KSurname); newCard->AddFieldL(*lastName); CleanupStack::Pop(lastName); // Create the emailAddress field and add the data to it +++CContactItemField* emailAddr = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldEMail); +++emailAddr-> AddFieldTypeL(KUidContactFieldVCardMapCELL); +++emailAddr->SetMapping(KUidContactFieldVCardMapEMAILINTERNET); emailAddr ->TextStorage()->SetTextL(KEmailAddress); newCard->AddFieldL(*emailAddr); CleanupStack::Pop(emailAddr); // Create the phoneNo field and add the data to it CContactItemField* phoneNumber = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldPhoneNumber); phoneNumber->SetMapping(KUidContactFieldVCardMapTEL); phoneNumber ->TextStorage()->SetTextL(KPhoneNumber); newCard->AddFieldL(*phoneNumber); CleanupStack::Pop(phoneNumber); // Add newCard to the database const TContactItemId contactId = db->AddNewContactL(*newCard); CleanupStack::PopAndDestroy(newCard); }
EMAIL;CELL;ENCODING=QUOTED-PRINTABLE:john.smith=40symbian.com
The following code snippet describes how to add an email field and a HOME field type. The corresponding EMAIL property, if the contact item is exported, is also shown.
// Create the emailAddress field and add the data to it CContactItemField* emailAddr = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldEMail); emailAddr-> AddFieldTypeL(KUidContactFieldVCardMapHOME); emailAddr->SetMapping(KUidContactFieldVCardMapEMAILINTERNET); emailAddr ->TextStorage()->SetTextL(KEmailAddress); newCard->AddFieldL(*emailAddr); CleanupStack::Pop(emailAddr);
EMAIL;HOME;ENCODING=QUOTED-PRINTABLE:john.smith=40symbian.com
The following code snippet describes how to add an email field and a WORK field type. The corresponding EMAIL property, if the contact item is exported, is also shown.
// Create the emailAddress field and add the data to it CContactItemField* emailAddr = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldEMail); emailAddr-> AddFieldTypeL(KUidContactFieldVCardMapWORK); emailAddr->SetMapping(KUidContactFieldVCardMapEMAILINTERNET); emailAddr ->TextStorage()->SetTextL(KEmailAddress); newCard->AddFieldL(*emailAddr); CleanupStack::Pop(emailAddr);
EMAIL;WORK;ENCODING=QUOTED-PRINTABLE:john.smith=40symbian.com
The following code snippet describes how to add an email field and an INTERNET field type. The corresponding EMAIL property, if the contact item is exported, is also shown. There are two ways of creating an email field with an internet type.
The first one is: // Create the emailAddress field and add the data to it CContactItemField* emailAddr = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldEMail); // Do not add another fieldtype! emailAddr->SetMapping(KUidContactFieldVCardMapEMAILINTERNET); emailAddr ->TextStorage()->SetTextL(KEmailAddress); newCard->AddFieldL(*emailAddr); CleanupStack::Pop(emailAddr); This would have the effect of adding an INTERNET field type by default. The second method is to explicitly add: // Create the emailAddress field and add the data to it CContactItemField* emailAddr = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldEMail); emailAddr-> AddFieldTypeL(KUidContactFieldVCardMapINTERNET); emailAddr->SetMapping(KUidContactFieldVCardMapEMAILINTERNET); emailAddr ->TextStorage()->SetTextL(KEmailAddress); newCard->AddFieldL(*emailAddr); CleanupStack::Pop(emailAddr);
EMAIL;INTERNET;ENCODING=QUOTED-PRINTABLE:john.smith=40symbian.com