私はVSTOアドインを持っており、アドレスリスト内の人々のリストをフォームに表示しようとしています。グローバルアドレスリストで検索したいのですが、ワイルドカード文字のみに基づいて検索します。
このコードはアドレスリストのすべてのエントリをループしているのがわかりますが、10万を超えるエントリがあるので、ループを実行したくないので、検索で事前フィルターを実行する方法があるのではないかと思いました。
例として、名前が「ABC」で始まる名簿の人物を検索したいと思います。これは可能ですか?
私はVSTOアドインを持っており、アドレスリスト内の人々のリストをフォームに表示しようとしています。グローバルアドレスリストで検索したいのですが、ワイルドカード文字のみに基づいて検索します。
このコードはアドレスリストのすべてのエントリをループしているのがわかりますが、10万を超えるエントリがあるので、ループを実行したくないので、検索で事前フィルターを実行する方法があるのではないかと思いました。
例として、名前が「ABC」で始まる名簿の人物を検索したいと思います。これは可能ですか?
VSTO を使用するのではなく、実際には EWS (Exchange の WCF のような Web サービス) を使用します。このようにして、ほとんどすべての環境でコードを呼び出すことができます。
http://vivekiyer.net/2010/07/17/querying-the-global-address-list-gal-via-exchange-web-services-ews/
Outlook オブジェクト モデルでは、それを行うことはできません。拡張 MAPI レベル (C++ または Delphi のみ) では、GAL コンテナに対して PR_ANR 制限を作成できます。
RedemptionとそのRDOAddressList .ResolveNameEx メソッドを使用して、一致するすべてのエントリのリストを取得することもできます。
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set AdrrEntries = Session.AddressBook.GAL.ResolveNameEx("ABC")
Debug.Print AdrrEntries.Count & " names were returned by ResolveNameEx:"
for each AE in AdrrEntries
Debug.Print AE.Name
next