Pour chaque items composant la base de données d'outlook il existe une propriété qui identifie de façon unique un item pour la messagerie, les appointements, les tâches et les contactes, les notes et autres.
le hic c'est qu'il faut spécifier le dossier qui a pour entité unique (propriété) StoreID l. ID spécique d'un dossier sur lequel se portera la recherche. Bref il faut savoir ce qu l'on recherche. On recherche un message, un contacte ou une tâche ?.... c,est à nous de le savoir
Qu'elle est l'importance ? ..... Je dirais que dans une base de données de contactes, il peut y avoir plusieurs Mike Gagnon (notre expert Outlook) qui figure dans notre base de contactes. Et pour chaq'un de ces Mike, on aura un Id différent et ca va de soi, on est habitué à ca avec Fox.
Cette propriété c'est EntryID
Donc on a un StoredID qui identifie un dossier et un EntryID qui idenfie un item de ce dossier.
Là ou j'ai eu beaucoup de difficulté c'est que la fonction de recherche loContactFolder.items.Find() ne fonctionne pas avec l'entryId
on peut écrire loMikeItem = loContactFolder.items.find("[Firstname] = 'Mike'") et ca fonctionnera pour le premier item rencontré dans la liste des contactes pour Firstname = Mike. Bref ca ne veut pas dire que c'est le bon Mike et s'il y en un on peut toujours exécuter ? loMikeItem.fullname ? loMikeItem.homeadress
Pouquoi je veux travailler avec l'entryID ?.
En Vba j'ai développer 12 fonctions qui me permettent de savoir si j'ai ajouté, modifier ou détruit un item dans les dossiers agenda, contacte, tache ou messagerie. La seul chose que ces fonctions font c'est d'enregistrer l'entryID dans un fichier texte comme suivant :
et ainsi de suite. dans chacun de ces fichiers texte ou je retrouve la donnée suivante
00000000FB9DC40F4AEB6548A4211D0BD77C4D3F84202000 soi un EntryID que je retrouverai aisément dans une table.dbf
Ma surprise c'est que toutes les modifs apportés par la synchro avec mon mobile 6.1 sont aussi répertoriés.
j'ai donc 2 données intéressante : I PM.Appointment AddItem qui me dit que j'ai ajouté l'appointement "00000000FB9DC40F4AEB6548A4211D0BD77C4D3F84202000" qui me dit de quel EntryId il s'agit dans l'agenda
Saurait aussi pu etre IPM.Task DelItem 00000000FB9DC40F4AEB6548A4211D0BD77C4D3F84202000
Donc vous devinez la suite. Il devient facile de modifier et de répertorier dans des dbfs comme dans sql server une relation unique entre les tables et le fichier Pst d'outlook.
* Sauvegarde de ID du dossier contacte
lcContactFolderID = m.loContactFolder.StoreID
* placer l'item(objet) du 3ieme contacte
loContact = loContactFolder.items(3)
* ID d'un contacte du dossier Contact
m.lcContactID = loContact.EntryID
* Comment trouver ce ID le contacte cibler
loItemByID = loNameSpace.GetItemFromID(m.lcContactID,lcContactFolderID)
*!* Ca m'a pris un bon bout de temps à trouver cette exemple que j'ai trouvé en VBA *!* et voici le code
*!* Sub OutlookEntryID() *!* *!* ' The Outlook object library must be referenced. *!* Dim ol As Outlook.Application *!* Dim olns As Outlook.NameSpace *!* Dim objFolder As Outlook.MAPIFolder *!* Dim AllContacts As Outlook.Items *!* Dim Item As Outlook.ContactItem *!* Dim I As Integer *!* *!* ' If there are more than 500 contacts, change the following line: *!* Dim MyEntryID(500) As String *!* Dim StoreID As String *!* Dim strFind As String *!* *!* ' Set the application object *!* Set ol = New Outlook.Application *!* *!* ' Set the namespace object *!* Set olns = ol.GetNamespace("MAPI") *!* *!* ' Set the default Contacts folder. *!* Set objFolder = olns.GetDefaultFolder(olFolderContacts) *!* *!* ' Get the StoreID, which is a property of the folder. *!* StoreID = objFolder.StoreID *!* *!* ' Set objAllContacts equal to the collection of all contacts. *!* Set AllContacts = objFolder.Items *!* I = 0 *!* *!* ' Loop to get all of the EntryIDs for the contacts. *!*
*!* ' ici l'auteur a choisi de charger un tableau *!* ' avec les EntryID de toutes les contactes dans MyEntryID *!* For Each Item In AllContacts *!* I = I + 1 *!* ' The EntryID is a property of the item. *!* MyEntryID(I) = Item.EntryID *!* Next *!* *!* ' Randomly choose the 2nd Contact to retrieve. *!* ' In a larger solution, this might be the index from a list box. *!* ' Both the StoreID and EntryID must be used to retrieve the item. *!* Set Item = olns.GetItemFromID(MyEntryID(2), StoreID) *!* Item.Display *!* *!* End SubID,lcContactFolderID)
super intéressant, merci
thn