2010-11-18 31 views
4

Je suis en train de développer une application qui permettra à l'utilisateur d'afficher le contenu d'une boîte de réception à laquelle il a accès. Je suis un moment difficile essayer de trouver un moyen de rechercher la liste d'adresses globale, puis d'autresRecherche dans la liste d'adresses globale/le livre

AddressEntries entries = global.AddressEntries; 
AddressEntry entry = entries["search value"]; 

Cela fonctionne, mais seulement retourne une instance, et il est le premier trouvé. Je veux fondamentalement fournir une liste à l'utilisateur s'il y a plusieurs résultats.

En second lieu, je voudrais être en mesure de voir les détails de contact, mais quand j'utilise le

ContactItem contact = entry.GetContact(); 

Il retourne toujours null, je pense qu'il est parce qu'il est à la recherche à la liste des contacts personnels de l'utilisateur actuel

Je suppose que j'essaie de créer une version simple de la fenêtre Global Address Book dans Outlook, si cela est logique.

De toute façon, si quelqu'un a des idées ou des références, je serais reconnaissant!

Merci Patrick

Répondre

3

Vous devriez être en mesure d'obtenir la liste d'adresses globale du profil actuel, comme indiqué ci-dessous.

Outlook.AddressLists addrLists = Application.Session.AddressLists; 
Outlook.AddressList gal = addrLists["Global Address List"]; 

Ensuite, vous pouvez énumérer et afficher les membres de cette AddressList.

Il existe une autre méthode pour cela décrite on MSDN here.

Comment: Énumérer les entrées dans la liste d'adresses globale

+0

Salut, merci pour la pointe. Je l'ai eu à travailler, bien en quelque sorte. Je passe presque 10k entrées, puis une erreur est lancée, je ne sais pas ce que c'est parce qu'il ne dit pas. Je sais qu'il doit y avoir une meilleure façon d'interroger la liste générale, puis en énumérant toute la liste (de près de 90k) – Patrick

+0

@Patrick - une sorte de curseur ou marque-page API serait utile pour permettre le traitement en morceaux - ne sais pas comment Outlook fait-il si vite. Comme vous l'avez noté, pas de cette façon à coup sûr. –

4
string[] names; 
Outlook.AddressLists addrLists = Application.Session.AddressLists; 
Outlook.AddressList gal = addrLists["Global Address List"]; 

//for a distrubution list do this... 
Outlook.AddressEntry entry = gal.AddressEntries["distribution list"]; 
Outlook.ExchangeDistributionList exchDL = entry.GetExchangeDistributionList(); 
Outlook.AddressEntries addrEntries = exchDL.GetExchangeDistributionListMembers(); 

names = new string[addrEntries.Count]; 

for (int i = 0; i < addrEntries.Count; i++) 
{ 
    Outlook.AddressEntry exchDLMember = addrEntries[i]; 
    names[i] = exchDLMember.Name; 
} 

return names; 

//for an individual you could do something like this... 
Outlook.AddressEntry entry = gal.AddressEntries["contact nickname"]; 

Outlook.ContactItem contact = entry.GetContact(); 
string name = contact.NickName; 
string email = contact.Email1Address;