Поиск точной фразы во вложениях элементов в папке
В этом примере выполняется поиск точной строки поиска "office" во вложениях элементов в папке "Входящие".
Пример
В этом примере кода для задания запроса используется синтаксис DASL (DAV Searching and Locating). Для создания фильтра в коде сначала проверяется, включена ли в хранилище по умолчанию функция мгновенного поиска, чтобы определить, использовать ли ключевое слово ci_phrasematch для поиска точного совпадения фразы с "office" в теле элемента. Затем в примере применяется фильтр к методу GetTable папки "Входящие", и результаты возвращаются в объекте Table . После этого в примере кода отображается тема каждого возвращенного элемента в объекте Table.
Значение свойства Attachments в примере кода задается с помощью представления пространства имен, https://schemas.microsoft.com/mapi/proptag/0x0EA5001E
. Для ключевого слова ci_phrasematch используется следующий синтаксис:
<PropertySchemaName> ci_phrasematch <ComparisonString>
Если для тестирования этого примера кода вы используете 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 DemoSearchAttachments()
Dim filter As String
Const PR_SEARCH_ATTACHMENTS As String = _
"http://schemas.microsoft.com/mapi/proptag/0x0EA5001E"
If (Application.Session.DefaultStore.IsInstantSearchEnabled) Then
filter = "@SQL=" & Chr(34) _
& PR_SEARCH_ATTACHMENTS & Chr(34) _
& " ci_phrasematch 'office'"
Dim table As Outlook.Table = _
Application.Session.GetDefaultFolder( _
Outlook.OlDefaultFolders.olFolderInbox).GetTable( _
filter, Outlook.OlTableContents.olUserItems)
While Not (table.EndOfTable)
Dim row As Outlook.Row = table.GetNextRow()
Debug.WriteLine(row("Subject"))
End While
End If
End Sub
private void DemoSearchAttachments()
{
string filter;
const string PR_SEARCH_ATTACHMENTS =
"http://schemas.microsoft.com/mapi/proptag/0x0EA5001E";
if (Application.Session.DefaultStore.IsInstantSearchEnabled)
{
filter = "@SQL=" + "\""
+ PR_SEARCH_ATTACHMENTS + "\""
+ " ci_phrasematch 'office'";
Outlook.Table table = Application.Session.GetDefaultFolder(
Outlook.OlDefaultFolders.olFolderInbox).GetTable(
filter, Outlook.OlTableContents.olUserItems);
while (!table.EndOfTable)
{
Outlook.Row row = table.GetNextRow();
Debug.WriteLine(row["Subject"]);
}
}
}