Outlook Interop: как перебирать все элементы в папке - PullRequest
3 голосов
/ 14 ноября 2008

Я бы хотел обыскать все предметы внешнего вида. Я знаю, как сделать это для четырех элементов PIM (Заметки / Задачи / Встречи / Контакты). Но код идентичен для всех них, за исключением приведения объекта COM к конкретному типу элемента (то есть ContactItem, AppointmentItem и т. Д.). Есть ли родительский класс для этих элементов PIM, чтобы я мог сделать что-то подобное в моем цикле:


using Outlook = Microsoft.Office.Interop.Outlook

List SearchFolderItems( Outlook.Folder folder )
{
   List results = new List();
   foreach( object folderItem in folder.Items )
   {
      //GenericPIMItem is what I am wishing for
      Outlook.GenericPIMItem item  = (Outlook.GenericPIMItem)folderItem;
      if( item.Body.ToLower().Contains( "secret sauce" ) )
      {
         results.Add( item.Name );
      }
   }
}


Тело - это общее свойство четырех предметов PIM, к которым я хочу получить. Есть ли такой родительский элемент? Кажется плохой дизайн API, если нет? Полагаю, я мог бы абстрагировать элемент папки, чтобы он выглядел так, как будто есть родительский элемент ... Я также пытался сделать это с помощью отражения, но не смог добраться до него.

Есть какие-нибудь предложения?

Ответы [ 2 ]

1 голос
/ 14 ноября 2008

Глядя на документацию, я не вижу такого класса, как вы хотите.

Для Outlook 2007 список объектов, которые могут быть в коллекции Items, равен здесь . Он включает в себя такие элементы, как списки рассылки, которые не имеют тела, что делает маловероятным то, что вы хотите.

0 голосов
/ 24 ноября 2008

Хотя элементы PIM могут быть получены из общего класса, его нельзя создать с помощью объекта com, но все элементы также возвращают класс свойство, которое является перечислением для какого типа элемента это. Вы можете проверить это свойство для четырех типов предметов, которые вы хотите, прежде чем разыграть,

...