Outlook-Addin: как быстро извлечь дерево папок при использовании Exchange-Online - PullRequest
0 голосов
/ 17 февраля 2020

Я использую Библиотека погашения Outlook .

Я пытаюсь получить список папок в магазине Outlook. Мне нужны только папки, которые соответствуют некоторым критериям и нуждаются только в их имени и там DefaultMessageClass .

Итерация объектов RDOFolder довольно медленная, когда учетная запись Exchange без используется кэширование.

Поэтому я поиграл с GetAllChildFolders () и объединил его с помощью метода RODFolderItems find.

http://www.dimastr.com/redemption/RDOFolders.htm

var allFolder = ((RDOFolder2)rootFolder).GetAllChildFolders();

string folderSelect = "SELECT Name, EntryId, DefaultMessageClass FROM  FOLDER WHERE \"http://schemas.microsoft.com/mapi/proptag/0x3613001F\" like '%Note%'";

try
{
RDOFolder vFolder = vFolders.Find(folderSelect);


  while (vFolder != null)
  {
    System.Diagnostics.Debug.WriteLine(vFolder.Name);
    System.Diagnostics.Debug.WriteLine(vFolder.EntryID);
    System.Diagnostics.Debug.WriteLine(vFolder.DefaultMessageClass);

    vFolder = vFolders.FindNext();

   }
}
catch (Exception ex)
{
    //log error here!
}

Теперь у меня два вопроса!

1. SQL Синтаксис

Из документации find метод

Свойства, указанные в запросе SQL, должны использовать Outlook Имя свойства объектной модели (или RDO) (например, Subject, Email1Address)

Не удается заставить свойства Outlook или Redemption работать в операторе SQL. У кого-нибудь есть рабочий пример?

2. Свойства доступа к производительности

В онлайн-документации говорится следующее:

Включение предложения SELECT позволяет Redemption предварительно извлекать свойства из таблицы иерархии папок без открытия элемента, в результате чего в значительном приросте производительности (см. пример « I wi sh был один: -) »). Если позднее вы получите доступ к свойству, не указанному в предложении SELECT, Redemption откроет элемент.

Как получить доступ к предварительной выборке свойств из иерархии папок? Если я использую RDOFolder.Name, весь объект папки открывается, и прирост производительности невелик.

1 Ответ

0 голосов
/ 17 февраля 2020
  1. Какие свойства не работают? Вы получаете конкретную ошибку?

  2. Каково ваше полное утверждение SELECT? Чтобы избежать возможности открытия папки, используйте RDOFolders.MAPITable.ExecSQL - он вернет объект ADODB.Recordset.

...