Поделиться через


Фильтрация и отображение многозначных свойств при перечислении элементов в папке

В этом примере показан порядок фильтрации и отображения многозначных свойств при перечислении элементов в папке.

Пример

Примечание.

Приведенный ниже пример кода представляет собой фрагмент из книги Программирование приложений для Microsoft Office Outlook 2007.

Объект Table представляет набор данных элемента из объекта Folder или Search . При первом добавлении двоичного, многозначного свойства или свойства даты к объекту Table способ ссылки на свойство влияет на его тип и формат. Поскольку ссылки на встроенные имена иногда могут возвращать значения столбцов, отличные от ссылок на пространство имен, следует определить, задается ли ссылка на свойство с использованием его явного встроенного имени (если таковое есть) или с помощью пространства имен (независимо от наличия явного встроенного имени). В следующей таблице показаны различия в представлении значения свойства (относительно типа и формата) в зависимости от исходного типа свойства.

Тип

Тип возвращаемого значения, если для указанного свойства используется встроенное имя

Тип возвращаемого значения, если для указанного свойства используется пространство имен

Двоичный (PT_BINARY)

Строка

Массив байтов

Дата (PT_SYSTIME)

Местные дата и время

Дата и время в формате UTC

Многозначное (тип ключевого слова), например свойство Categories(PT_MV_STRING8)

Строка с разделителями-запятыми

Одномерный массив, содержащий один элемент для каждого ключевого слова

В следующем примере кода показаны порядок добавления свойства пространства имен строки MAPI в объект Table, а также влияние многозначных свойств на значения, возвращаемые в объект Column. Процедура TableMultiValuedProperties обеспечивает фильтрацию объекта Table в поиске строк, в которых свойство Categories не является пустой ссылкой. Свойство Categories представлено свойством, использующим пространство имен строки MAPI. Фильтр поиска и обнаружения DAV (DASL) создан для элементов, имеющих категории (фактический фильтр возвращает категории, для которых отсутствуют пустые ссылки). После этого столбец Categories добавляется в объект Table посредством объединения спецификатора типа 0000001f с константой categoriesProperty. Наконец, объект Column, представляющий свойство Categories, содержит одномерный массив строк, в котором каждый элемент массива представляет категорию, назначенную элементу. Свойства Categories и Subject записываются в прослушиватели трассировки коллекции Listeners.

Если вы используете Visual Studio для тестирования этого примера кода, сначала добавьте ссылку на компонент Microsoft Outlook 15.0 Object Library и задайте переменную Outlook при импорте пространства имен Microsoft.Office.Interop.Outlook. Инструкция using не должна находиться непосредственно перед функциями в примере кода, но ее нужно добавить перед объявлением общедоступного класса. В следующей строке кода показано, как выполнить импорт и назначение в C#.

using Outlook = Microsoft.Office.Interop.Outlook;
private void TableMultiValuedProperties()
{
    const string categoriesProperty =
        "http://schemas.microsoft.com/mapi/string/"
        + "{00020329-0000-0000-C000-000000000046}/Keywords";
    // Inbox
    Outlook.Folder folder =
        Application.Session.GetDefaultFolder(
        Outlook.OlDefaultFolders.olFolderInbox)
        as Outlook.Folder;
    // Call GetTable with filter for categories
    string filter = "@SQL="
        + "Not(" + "\"" + categoriesProperty
        + "\"" + " Is Null)";
    Outlook.Table table =
        folder.GetTable(filter,
        Outlook.OlTableContents.olUserItems);
    // Add categories column and append type specifier
    table.Columns.Add(categoriesProperty + "/0000001F");
    while (!table.EndOfTable)
    {
        Outlook.Row nextRow = table.GetNextRow();
        string[] categories =
            (string[])nextRow[categoriesProperty + "/0000001F"];
        Debug.WriteLine("Subject: " + nextRow["Subject"]);
        Debug.Write("Categories: ");
        foreach (string category in categories)
        {
            Debug.Write("\t" + category);
        }
        Debug.WriteLine("\n");
    }
}

См. также