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