C # VSTO Outlook 2007: как показать контакт по EntryID - PullRequest
5 голосов
/ 05 января 2011

Как открыть контакт с помощью C # VSTO Outlook 2007 надстройка по EntryID.

Теперь я передаю все контакты в папке контактов:

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;
    }
}

, но для многих контактов это неэффективный кодв папке контактов

Ответы [ 3 ]

3 голосов
/ 05 января 2011

Вы хотите использовать метод GetItemFromID объекта NameSpace (к нему неинтуитивно можно обратиться через свойство Application.Session, как вы делали выше).

Вам потребуется идентификатор магазина хранилища MAPI, из которого вы хотите получить элемент. Это легче всего получить из объекта 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);
2 голосов
/ 05 января 2011

окончательный код:

var outlookNS = this.Application.Session;
var fldContacts = outlookNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
ContactItem contact = (ContactItem)outlookNS.GetItemFromID(entryid, fldContacts.StoreID);
contact.Display(false);
1 голос
/ 06 января 2011

Я бы рекомендовал использовать метод Folder.GetTable для производительного перечисления большого объема элементов:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...