Et un article barbare ! un ! Donc, comment récupérer les contacts de notre GAL (Global Address List) à partir d’un développement Outlook ?
Apparement ils ont oublié de faire le boulot (là j’parle de nos amis de chez Microsoft). On se limite seulement aux contacts favoris relatif au client Outlook. Pour accéder aux contacts enregistrés sur le serveur Exchange, il faut utiliser des API bien spécifiques. C’est la tâche à laquelle s’est attelé un MVP en écrivant une classe assez complète.
C’est ici que ça se passe: http://www.dimastr.com/redemption
Un petit exemple de code en C# (le VB.NET est largement commenté sur le site de Redemption) :
//On déclare notre application OutlookApplication outlook = Globals.ThisAddIn.Application;//Puis un NameSpace de type MAPINameSpace ns = outlook.GetNamespace(« MAPI »);//Ensuite une session RedemptionRDOSessionClass rdoSession = new RDOSessionClass();
//L’objet MAPI de notre session mappé avec celui de notre namespacerdoSession.MAPIOBJECT = ns.MAPIOBJECT;//Un objet Adress Book
RDOAddressBook rdoAdd = rdoSession.AddressBook;//On parcoure les entrées du GALforeach (RDOAddressEntry rdoEnt in rdoAdd.GAL.AddressEntries)
{//On récupère le nom de l’entréestring sName = rdoEnt.Name.ToString();//Puis le faxconst int PR_PRIMARY_FAX_NUMBER = 0x3A23001E;
string sFaxNumber = (string)rdoEnt.get_Fields(PR_PRIMARY_FAX_NUMBER);}
Quelques remarques :
- Petite subtilité concernant le fax. Seules certaines propriétés de l’entrée sont disponibles. Pour les autres -comme dans notre exemple, le fax- ils faut utiliser la fonction get_fields() en lui indiquant la constante héxadecimale correspondante, puis caster la valeur récupérée comme il faut.
- Les données en question se trouvent ici : http://www.cdolive.com/cdo10.htm.
- Utilisez le prefixe &H pour le VB.NET, et 0x pour le C#.
- Pour savoir à quel champ correspond quelle donnée, utilisez l’utilitaire OutlookSpy : http://www.dimastr.com/outspy


