Фильтрация и эффективное перечисление элементов в папке
В этом примере показано, как использовать объект Table для фильтрации элементов с вложениями в папке "Входящие", эффективного перечисления таких элементов и показа выбранных свойств для каждого элемента.
Пример
В примере кода указывается свойство PR_HASATTACH с пространством имен MAPI и используется свойство для создания начального фильтра в методе GetTable в папке "Входящие". В объекте Table для типа элемента есть столбцы по умолчанию, представляющие определенные свойства этого типа элемента. Чтобы настроить столбцы, в этом примере сначала вызывается метод RemoveAll для коллекции Columns объекта Table, а затем вызывается метод Add для коллекции Columns, чтобы добавить свойства EntryID, Subject и ReceivedTime с помощью встроенных имен свойств с сохранением значений даты и времени в локальном представлении в столбце ReceivedTime.
После этого в примере еще раз вызывается Columns.Add, чтобы добавить свойство ReceiveTime, указывающее пространство имен MAPI, чтобы в этом столбце хранить значения даты и времени в формате UTC. В конце в примере перечисляются все элементы в объекте Table с отображением значения каждого из четырех свойств, указанных в качестве столбцов таблицы.
Если для тестирования этого примера кода вы используете Visual Studio, сначала добавьте ссылку на компонент библиотеки объектов Microsoft Outlook 15.0 и укажите переменную Outlook при импорте пространства имен Microsoft.Office.Interop.Outlook. Инструкция Imports или using не должна идти непосредственно перед функциями в примере кода, но ее нужно добавить перед объявлением общедоступного класса. В следующих строках кода показано, как выполнить импорт и назначение в Visual Basic и C#.
Imports Outlook = Microsoft.Office.Interop.Outlook
using Outlook = Microsoft.Office.Interop.Outlook;
Private Sub DemoTableColumns()
Const PR_HAS_ATTACH As String = _
"http://schemas.microsoft.com/mapi/proptag/0x0E1B000B"
' Obtain Inbox
Dim folder As Outlook.Folder = _
CType(Application.Session.GetDefaultFolder( _
Outlook.OlDefaultFolders.olFolderInbox), _
Outlook.Folder)
' Create filter
Dim filter As String = "@SQL=" & Chr(34) _
& PR_HAS_ATTACH & Chr(34) & " = 1"
Dim table As Outlook.Table = _
folder.GetTable(filter, _
Outlook.OlTableContents.olUserItems)
' Remove default columns
table.Columns.RemoveAll()
' Add using built-in name
table.Columns.Add("EntryID")
table.Columns.Add("Subject")
table.Columns.Add("ReceivedTime")
table.Sort("ReceivedTime", Outlook.OlSortOrder.olDescending)
' Add using namespace
' Date received
table.Columns.Add( _
"urn:schemas:httpmail:datereceived")
While Not (table.EndOfTable)
Dim nextRow As Outlook.Row = table.GetNextRow()
Dim sb As StringBuilder = New StringBuilder()
sb.AppendLine(nextRow("Subject").ToString())
' Reference column by name
sb.AppendLine("Received (Local): " _
& nextRow("ReceivedTime").ToString())
' Reference column by index
sb.AppendLine("Received (UTC): " & nextRow(4).ToString())
sb.AppendLine()
Debug.WriteLine(sb.ToString())
End While
End Sub
private void DemoTableColumns()
{
const string PR_HAS_ATTACH =
"http://schemas.microsoft.com/mapi/proptag/0x0E1B000B";
// Obtain Inbox
Outlook.Folder folder =
Application.Session.GetDefaultFolder(
Outlook.OlDefaultFolders.olFolderInbox)
as Outlook.Folder;
// Create filter
string filter = "@SQL=" + "\""
+ PR_HAS_ATTACH + "\"" + " = 1";
Outlook.Table table =
folder.GetTable(filter,
Outlook.OlTableContents.olUserItems);
// Remove default columns
table.Columns.RemoveAll();
// Add using built-in name
table.Columns.Add("EntryID");
table.Columns.Add("Subject");
table.Columns.Add("ReceivedTime");
table.Sort("ReceivedTime", Outlook.OlSortOrder.olDescending);
// Add using namespace
// Date received
table.Columns.Add(
"urn:schemas:httpmail:datereceived");
while (!table.EndOfTable)
{
Outlook.Row nextRow = table.GetNextRow();
StringBuilder sb = new StringBuilder();
sb.AppendLine(nextRow["Subject"].ToString());
// Reference column by name
sb.AppendLine("Received (Local): "
+ nextRow["ReceivedTime"]);
// Reference column by index
sb.AppendLine("Received (UTC): " + nextRow[4]);
sb.AppendLine();
Debug.WriteLine(sb.ToString());
}
}