2010-11-18 6 views
4

Ich entwickle eine App, mit der der Benutzer den Inhalt eines Posteingangs anzeigen kann, auf den er Zugriff hat. Ich habe eine schwierige Zeit ein Mittel zu suchen, die globale Adressliste andere dannSuche nach globalen Adresslisten/Buch

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

Dies funktioniert zu finden versucht, aber nur gibt eine Instanz, und es ist die erste gefunden. Ich möchte im Grunde eine Liste für den Benutzer bereitstellen, wenn mehrere Ergebnisse vorliegen.

Zweitens würde Ich mag Lage sein, die Daten zu sehen, aber wenn ich die

ContactItem contact = entry.GetContact(); 

Es ist immer null zurück, denke ich, dass es ist, weil es bei der aktuellen Benutzerkontaktliste über sucht

Ich vermute, dass ich versuche, eine einfache Version des globalen Adressbuch-Fensters in Outlook zu erstellen, wenn das Sinn macht.

Wie auch immer, wenn jemand irgendwelche Ideen oder Referenzen hat, wäre ich dankbar!

Dank Patrick

Antwort

3

Sie sollten die globale Adressliste von aktuellem Profil erhalten können, wie unten gezeigt.

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

Dann können Sie die Mitglieder dieser AddressList aufzuzählen und anzuzeigen.

Es gibt einen anderen Weg, dies zu tun beschrieben on MSDN here.

Gewusst wie: Auflisten der Einträge in der globalen Adressliste

+0

Hallo, danke für den Tipp. Ich habe es zur Arbeit gebracht, naja. Ich komme fast durch 10k Einträge und dann wird ein Fehler geworfen, nicht sicher, was es ist, weil es nicht sagt. Ich weiß, es gibt eine bessere Möglichkeit, die GAL abzufragen, dann durch die gesamte Liste (von fast 90k) – Patrick

+0

@Patrick - eine Art von Cursor oder Lesezeichen-API wäre nützlich, um die Verarbeitung in Chunks zulassen - weiß nicht, wie Outlook macht das so schnell. Wie Sie bemerkt haben, nicht so sicher. –

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;