Archived:Exporting a vCard item from contacts to a file using Symbian C++
tanjaluodes
(Talk | contribs) m |
hamishwillee
(Talk | contribs) m (Hamishwillee - Bot change of template (Template:CodeSnippet) - now using Template:ArticleMetaData) |
||
| Line 2: | Line 2: | ||
__NOEDITSECTION__ | __NOEDITSECTION__ | ||
{{KBCS}} | {{KBCS}} | ||
| − | {{ | + | {{ArticleMetaData |
|id=CS000901 | |id=CS000901 | ||
|platform=S60 3rd Edition, FP1 | |platform=S60 3rd Edition, FP1 | ||
| Line 10: | Line 10: | ||
|creationdate=April 17, 2008 | |creationdate=April 17, 2008 | ||
|keywords=RFileWriteStream, CContactDatabase, CContactIdArray, CCntFilter, CContactDatabase::OpenL(), CContactDatabase::ExportSelectedContactsL(), CContactDatabase::FilterDatabaseL(), CCntFilter::SetContactFilterTypeALL(), CCntFilter::SetContactFilterTypeCard() | |keywords=RFileWriteStream, CContactDatabase, CContactIdArray, CCntFilter, CContactDatabase::OpenL(), CContactDatabase::ExportSelectedContactsL(), CContactDatabase::FilterDatabaseL(), CCntFilter::SetContactFilterTypeALL(), CCntFilter::SetContactFilterTypeCard() | ||
| + | |||
| + | |sourcecode= <!-- Link to example source code (e.g. [[Media:The Code Example ZIP.zip]]) --> | ||
| + | |installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) --> | ||
| + | |sdk=<!-- SDK(s) built and tested against (e.g. [http://linktosdkdownload/ Nokia Qt SDK 1.1]) --> | ||
| + | |devicecompatability=<!-- Compatible devices (e.g.: All* (must have GPS) ) --> | ||
| + | |signing=<!-- Empty or one of Self-Signed, DevCert, Manufacturer --> | ||
| + | |capabilities=<!-- Capabilities required (e.g. Location, NetworkServices. -->) | ||
| + | |author=[[User:Aknyman]] | ||
}} | }} | ||
Revision as of 11:22, 24 June 2011
Article Metadata
Tested with
Devices(s): Nokia N93
Compatibility
Platform(s): S60 3rd Edition, FP1
Platform Security
Capabilities: )
Article
Keywords: RFileWriteStream, CContactDatabase, CContactIdArray, CCntFilter, CContactDatabase::OpenL(), CContactDatabase::ExportSelectedContactsL(), CContactDatabase::FilterDatabaseL(), CCntFilter::SetContactFilterTypeALL(), CCntFilter::SetContactFilterTypeCard()
Created: aknyman
(17 Apr 2008)
Last edited: hamishwillee
(24 Jun 2011)
Overview
This snippet shows a simple function implementation to export one contact from the default contacts database as a vCard to a given file.
This snippet can be self-signed.
MMP file
The following capabilities and libraries are required:
CAPABILITY ReadUserData
LIBRARY euser.lib
LIBRARY estor.lib
LIBRARY efsrv.lib
LIBRARY cntmodel.lib
Source file
#include <e32cmn.h> //TUid
#include <e32std.h> //User
#include <e32base.h> //CArrayPtr, CleanupStack
#include <e32def.h> //TBool
#include <s32file.h> //RFileReadStream
#include <f32file.h> //RFs
#include <cntdb.h> //CContactDatabase
#include <cntdef.h> //CContactIdArray
#include <cntfilt.h> //CCntFilter
TBool ExportVCardL(const TDesC& aFileName, TInt aItemIndex)
{
RFs fileSession;
RFile file;
User::LeaveIfError(fileSession.Connect());
CleanupClosePushL(fileSession);
if (file.Replace(fileSession, aFileName, EFileWrite) != KErrNone)
{
//failed to create the file
CleanupStack::PopAndDestroy(); //fileSession
return EFalse;
}
CleanupClosePushL(file);
//open a write stream to the file
RFileWriteStream outputFileStream(file);
CleanupClosePushL(outputFileStream);
//open the default contacts database
CContactDatabase* contactsDb = CContactDatabase::OpenL();
CleanupStack::PushL(contactsDb);
//create an array of contact IDs to export
CContactIdArray* exportContacts = CContactIdArray::NewL();
CleanupStack::PushL(exportContacts);
//use a filter to get only contact items (e.g. templates are excluded)
CCntFilter *filter = CCntFilter::NewLC();
filter->SetContactFilterTypeALL(EFalse);
filter->SetContactFilterTypeCard(ETrue);
contactsDb->FilterDatabaseL(*filter);
//create an array to hold all filtered contact items
CContactIdArray* contactIds;
contactIds = CContactIdArray::NewLC(filter->iIds);
//add given contact(by index) to the array of contact IDs to export
if((*contactIds).Count() >= aItemIndex)
exportContacts->AddL((*contactIds)[aItemIndex] );
CleanupStack::PopAndDestroy(2); //contactIds, filter
//KVersitEntityUidVCard is used to identify a vCard
TUid uid = TUid::Uid(KVersitEntityUidVCard);
contactsDb->ExportSelectedContactsL(uid,
*exportContacts,
outputFileStream,
//contact ID is no exported
CContactDatabase::EExcludeUid);
CleanupStack::PopAndDestroy(5); //exportContacts,contactsDb,
//outputFileStream,file,fileSession
return ETrue;
}
Postconditions
A contact given by the index from the default contacts database is exported as a vCard to the given file.
The function returns ETrue to the caller when the file creation succeeds or EFalse when the file creation fails.

