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


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

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

Пример

Примечание.

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

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

Свойство

Для метода Columns.Add

Для метода Restrict

Двоичные свойства, например EntryID.

Поддерживаются через встроенное свойство или свойство пространства имен.

Не поддерживается. Возникает ошибка приложения Outlook.

Свойства основного текста, включая Body и HTMLBody, а также представление этих свойств в пространстве имен, включая PR_RTF_COMPRESSED.

Свойство Body поддерживается при условии, что только первые 255 байт значения хранятся в объекте Table. Другие свойства, которые представляют основное содержимое в формате HTML или RTF не поддерживаются. Так как возвращаются только первые 255 байт свойства Body, поэтому если нужно получить все основное содержимое элемента в формате текста или HTML, используйте свойство элемента EntryID в методе GetItemFromID(String, Object), чтобы получить объект элемента. Затем извлеките полное значение Body из объекта элемента.

В фильтре поддерживается только свойство Body, представленное в тексте. Это означает, что в фильтре поиска и обнаружения DAV (DASL) должна присутствовать ссылка на свойство в формате urn:schemas:http-mail:textdescription, а фильтрация по тегам HTML в тексте сообщения не поддерживается. Чтобы повысить быстродействие, следует использовать в фильтре ключевые слова индексатора контента для сопоставления строк в тексте сообщения.

Свойства вычисления, например AutoResolvedWinner и BodyFormat.

Не поддерживаются.

Не поддерживаются.

Многозначные свойства, например Categories, Children, Companies и VotingOptions.

Поддерживаются.

Поддерживаются при условии, что можно создать запрос DASL с помощью представления в пространстве имен.

Свойства, возвращающие объект, например Attachments, Parent, Recipients, RecurrencePattern и UserProperties.

Не поддерживаются.

Не поддерживаются.

В следующей таблице перечислены известные недопустимые свойства, которые нельзя добавить в объект Table с помощью метода Columns.Add. При попытке добавить свойство из этого списка возникает ошибка приложения Outlook.

AutoResolvedWinner

BodyFormat

Class

Companies

ContactNames

DLName

DownloadState

FlagIcon

HtmlBody

InternetCodePage

IsConflict

IsMarkedAsTask

MeetingWorkspaceURL

MemberCount

Permission

PermissionService

RecurrenceState

ResponseState

Saved

Sent

Submitted

TaskSubject

Unread

VotingOptions

Некоторые вычисляемые свойства невозможно добавить в набор столбцов таблицы, но в следующем примере кода выполняется обход этого ограничения. В процедуре GetToDoItems используется запрос DASL для ограничения элементов, отображающихся в объекте Table. Если вычисляемое свойство имеет представление в пространстве имен, это представление используется для создания запроса DASL, который ограничивает объект Table и возвращает строки для заданного значения вычисляемого свойства. Процедура GetToDoItems получает элементы из папки "Входящие", для которых значение свойства IsMarkedAsTask равно true, а затем присваивает эти значения определенным свойствам задачи, таким как TaskSubject, TaskDueDate, TaskStartDate и TaskCompletedDate. В завершение эти свойства записываются в прослушиватели трассировки коллекции Listeners.

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

using Outlook = Microsoft.Office.Interop.Outlook;
private void GetToDoItems()
{
    // Obtain Inbox
    Outlook.Folder folder =
        Application.Session.GetDefaultFolder(
        Outlook.OlDefaultFolders.olFolderInbox)
        as Outlook.Folder;
    // DASL filter for IsMarkedAsTask
    string filter = "@SQL=" + "\"" +
        "http://schemas.microsoft.com/mapi/proptag/0x0E2B0003"
        + "\"" + " = 1";
    Outlook.Table table =
        folder.GetTable(filter,
        Outlook.OlTableContents.olUserItems);
    table.Columns.Add("TaskStartDate");
    table.Columns.Add("TaskDueDate");
    table.Columns.Add("TaskCompletedDate");
    // Use GUID/ID to represent TaskSubject
    table.Columns.Add(
        "http://schemas.microsoft.com/mapi/id/" +
        "{00062008-0000-0000-C000-000000000046}/85A4001E");
    while (!table.EndOfTable)
    {
        Outlook.Row nextRow = table.GetNextRow();
        StringBuilder sb = new StringBuilder();
        sb.AppendLine("Task Subject: " + nextRow[9]);
        sb.AppendLine("Start Date: "
            + nextRow["TaskStartDate"]);
        sb.AppendLine("Due Date: "
            + nextRow["TaskDueDate"]);
        sb.AppendLine("Completed Date: "
            + nextRow["TaskCompletedDate"]);
        sb.AppendLine();
        Debug.WriteLine(sb.ToString());
    }
}

См. также