ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Outlook : Recheche avec EntryID   



L'auteur

eddymaue
Canada Canada
Membre Simple
# 0000000075
enregistré le 26/10/2004
Maue Eddy
j8j 8j8 Gatineau
de la société Formatek
Fiche personnelle


Note des membres
19/20
1 vote


Contributions > 09 - Automation > Outlook

Outlook : Recheche avec EntryID
# 0000000761
ajouté le 07/06/2010 06:56:32 et modifié le 08/06/2010
consulté 5441 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0

Description
Salut vous tous,

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 :

2010-05-31 85316,36IPM.TaskDelItem .txt
2010-05-31 85380,64IPM.Task AddItem .txt
2010-05-31 85387,2IPM.Task ModifItem .txt
2010-05-31 85389,37IPM.Task DelItem .txt
2010-05-31 85405,13IPM.Task ModifItem .txt
2010-05-31 85407,09IPM.Task DelItem .txt
2010-05-31 85442,98IPM.Appointment AddItem .txt
2010-05-31 85446,24IPM.Appointment ModifItem .txt
......

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.

a+ et bonne chance pour la suite

Code source :
* ouverture
loOlkApp = CreateObject("outlook.application")

loNameSpace = loOlkApp.GetNamespace("MAPI")

* Contact Folder
loContactFolder = m.loNameSpace.GetDefaultFolder(10)

* 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)
Commentaires
le 18/06/2010, FoxInCloud (Th. Nivelet) a écrit :
super intéressant, merci
thn


Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2018.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0