5

EntryIDでC#VSTOOutlook2007アドインを使用して連絡先を開く方法。

今、私は連絡先フォルダ内のすべての連絡先をforeachingしています:

string entryid = ...

Outlook.Application outlookApp = new Outlook.Application();
Outlook.MAPIFolder fldContacts = outlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts) as Outlook.MAPIFolder;
foreach (Outlook._ContactItem contact in fldContacts.Items)
{
    if (contact.EntryID==entryid) {
         contact.Display(false);
         break;
    }
}

しかし、これは連絡先フォルダ内の多くの連絡先にとって効果的なコードではありません

4

3 に答える 3

3

NameSpaceオブジェクトのGetItemFromIDメソッドを使用する必要があります(直感的には、上記のようにApplication.Sessionプロパティを介してアクセスできます)。

アイテムを取得するMAPIストアのストアIDが必要になります。これは、すでに参照しているFolderオブジェクトから最も簡単に取得できます。

string entryid = ...

var outlookApp = new Outlook.Application();
var outlookNS = outlookApp.Session;
var fldContacts = outlookNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
var contact = outlookNS.GetItemFromID(entryid, fldContacts.StoreID);
于 2011-01-04T23:58:51.440 に答える
2

最終コード:

var outlookNS = this.Application.Session;
var fldContacts = outlookNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
ContactItem contact = (ContactItem)outlookNS.GetItemFromID(entryid, fldContacts.StoreID);
contact.Display(false);
于 2011-01-05T14:44:37.210 に答える
1

大量のアイテムをパフォーマンス的に列挙するには、Folder.GetTableメソッドを使用することをお勧めします。

http://msdn.microsoft.com/en-us/library/bb147574(office.12).aspx

于 2011-01-05T22:00:50.903 に答える