Поиск общедоступной папки контактов Outlook из C#
У нас есть большая папка общедоступных контактов в Outlook, которая называется Глобальные контакты, и я хотел бы иметь возможность выполнять поиск по ней и возвращать ряд результатов, которые соответствуют определенным критериям, в идеале в стиле подстановочных знаков.
Например, если кто-то введет "je" в текстовое поле "имя", он вернет все контакты, имена которых содержат "je". Это может быть связано как AND с текстовым полем названия компании.
Большинство примеров, которые я видел, либо в VB, либо связаны с созданием этой формы веб-приложения - я создаю приложение winforms, и на каждой машине установлен Outlook 2002 (да, я знаю, обновление уже давно).
Может кто-то указать мне верное направление? Какой-то код был бы хорош для начала.
ура
2 ответа
Я закончил тем, что сделал это:
Microsoft.Office.Interop.Outlook._Application objOutlook; //declare Outlook application
objOutlook = new Microsoft.Office.Interop.Outlook.Application(); //create it
Microsoft.Office.Interop.Outlook._NameSpace objNS = objOutlook.Session; //create new session
Microsoft.Office.Interop.Outlook.MAPIFolder oAllPublicFolders; //what it says on the tin
Microsoft.Office.Interop.Outlook.MAPIFolder oPublicFolders; // as above
Microsoft.Office.Interop.Outlook.MAPIFolder objContacts; //as above
Microsoft.Office.Interop.Outlook.Items itmsFiltered; //the filtered items list
oPublicFolders = objNS.Folders["Public Folders"];
oAllPublicFolders = oPublicFolders.Folders["All Public Folders"];
objContacts = oAllPublicFolders.Folders["Global Contacts"];
itmsFiltered = objContacts.Items.Restrict(strFilter);//restrict the search to our filter terms
Затем просто перебирая itmsFiltered, чтобы добавить его в ObjectListView. Надеюсь, это пригодится кому-то, кто хочет сделать то же самое - мне понадобилось время, чтобы собрать это из разных источников.
Чтобы найти папку контактов, вы можете перебрать элементы olFolderContacts. Вот код
using System;
using Microsoft.Office.Interop.Outlook;
using Application = Microsoft.Office.Interop.Outlook.Application;
namespace RyanCore
{
public class Loader
{
public static ContactsViewModel LoadModel(Application objOutlook)
{
var viewModel = new ContactsViewModel();
MAPIFolder fldContacts = objOutlook.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
foreach (object obj in fldContacts.Items)
{
if (obj is _ContactItem)
{
var contact = (_ContactItem) obj;
viewModel.Contacts.Add(new Contact(contact.FirstName + " " + contact.LastName, contact.Email1Address));
}
else if (obj is DistListItem)
{
var distListItem = (DistListItem) obj;
var contactGroup = new ContactGroup(distListItem.Subject);
viewModel.Groups.Add(contactGroup);
for (Int32 i = 1; i <= distListItem.MemberCount; i++)
{
Recipient subMember = distListItem.GetMember(i);
contactGroup.Contacts.Add(new Contact(subMember.Name, subMember.AddressEntry.Address));
}
}
}
return viewModel;
}
}
}