Фильтрация и отображение многозначных свойств при перечислении элементов в папке
В этом примере показан порядок фильтрации и отображения многозначных свойств при перечислении элементов в папке.
Пример
Примечание.
Приведенный ниже пример кода представляет собой фрагмент из книги Программирование приложений для 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");
}
}