5

如何通过 EntryID 使用 C# VSTO Outlook 2007 插件打开联系人。

现在我正在查找联系人文件夹中的所有联系人:

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。这可以最容易地从您也已经获得引用的文件夹对象中检索。

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 回答