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


Поиск фразы в тексте элементов в папке

В этом примере выполняется поиск строки "office" в тексте элементов в папке "Входящие".

Пример

В этом примере кода для задания запроса используется синтаксис DASL (DAV Searching and Locating). Для создания фильтра в коде примера сначала проверяется, включена ли в хранилище по умолчанию функция мгновенного поиска, чтобы определить, использовать ли ключевое слово ci_phrasematch для точного совпадения фразы в теле элемента с "office" или ключевое слово like для поиска любого вхождения "office" как точной строки или подстроки в теле элемента. Затем в примере применяется фильтр к методу GetTable папки "Входящие", и результаты возвращаются в объекте Table . После этого в примере кода отображается тема каждого возвращенного элемента в объекте Table.

Значение свойства Body в примере кода задается с помощью представления пространства имен urn:schemas:httpmail:textdescription.

Для ключевого слова ci_phrasematch используется следующий синтаксис:

<PropertySchemaName> ci_phrasematch <ComparisonString>

Для ключевого слова like при сопоставлении префикса используется следующий синтаксис:

<PropertySchemaName> like <Token>%

Для ключевого слова like при сопоставлении любой подстроки используется следующий синтаксис:

<PropertySchemaName> like %<Token>%

Если для тестирования этого примера кода вы используете 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 DemoSearchBody()
    Dim filter As String
    If (Application.Session.DefaultStore.IsInstantSearchEnabled) Then
        filter = "@SQL=" & Chr(34) _
            & "urn:schemas:httpmail:textdescription" & Chr(34) _
            & " ci_phrasematch 'office'"
    Else
        filter = "@SQL=" & Chr(34) _
            & "urn:schemas:httpmail:textdescription" & Chr(34) _
            & " like '%office%'"
    End If
    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 Sub
private void DemoSearchBody()
{
    string filter;
    if (Application.Session.DefaultStore.IsInstantSearchEnabled)
    {
        filter = "@SQL=" + "\""
            + "urn:schemas:httpmail:textdescription" + "\""
            + " ci_phrasematch 'office'";
    }
    else
    {
        filter = "@SQL=" + "\""
            + "urn:schemas:httpmail:textdescription" + "\""
            + " like '%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"]);
    }
}

См. также