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


_Items.Restrict(String) Метод

Определение

Применяет фильтр к Items коллекции, возвращая новую коллекцию, содержащую все элементы исходного объекта, соответствующие фильтру.

public:
 Microsoft::Office::Interop::Outlook::Items ^ Restrict(System::String ^ Filter);
public Microsoft.Office.Interop.Outlook.Items Restrict (string Filter);
Public Function Restrict (Filter As String) As Items

Параметры

Filter
String

Применяемое выражение строки фильтра. Дополнительные сведения см. в методе Find(String) .

Возвращаемое значение

Коллекция Items , представляющая элементы из исходной коллекции Items , которые соответствуют фильтру.

Комментарии

Этот метод является альтернативой использованию Find(String) метода или FindNext() метода для итерации определенных элементов в коллекции. Методы Find или FindNext выполняются быстрее, чем фильтрация при наличии небольшого количества элементов. Метод Restrict выполняется значительно быстрее, если в коллекции имеется большое количество элементов, особенно если ожидается найти только несколько элементов в большой коллекции.

Примечание. Если вы используете определяемые пользователем поля в составе предложения Find или Restrict , определяемые пользователем поля должны существовать в папке. В противном случае код создаст ошибку о том, что поле неизвестно. Вы можете добавить поле в папку, отобразив выбор поля и нажав кнопку Создать.

Этот метод не может быть использован и вызовет ошибку со следующими свойствами:

BodyCategoriesChildrenClassCompaniesCompanyLastFirstNoSpaceCompanyLastFirstSpaceOnlyContactNamesContactsConversationIndexDLNameEmail1EntryIDEmail2EntryIDEmail3EntryIDEntryIDHTMLBodyIsOnlineMeetingLastFirstAndSuffixLastFirstNoSpaceAutoResolvedWinnerBodyFormatInternetCodePagePermissionLastFirstNoSpaceCompanyLastFirstSpaceOnlyLastFirstSpaceOnlyCompanyLastFirstNoSpaceAndSuffixMemberCountNetMeetingAliasNetMeetingAutoStartNetMeetingOrganizerAliasNetMeetingServerNetMeetingTypeRecurrenceStateReplyRecipientsReceivedByEntryIDRecevedOnBehalfOfEntryIDResponseStateSavedSentSubmittedVotingOptionsDownloadStateIsConflictMeetingWorkspaceURL

Создание фильтров для методов поиска и ограничения

Синтаксис фильтра зависит от типа поля, по которого выполняется фильтрация.

Строка (для текстовых полей)

При поиске в текстовых полях можно использовать апостроф (') или двойные кавычки (""), чтобы разделить значения, входящие в фильтр. Например, все следующие строки работают правильно, если поле имеет тип String (строка в C#):

sFilter = "[CompanyName] = "Microsoft""

sFilter = "[CompanyName] = ""Microsoft""

sFilter = "[CompanyName] = " & Chr(34) & "Microsoft" & Chr(34)

Если при указании фильтра в запросе Jet или DASL используется пара одинарных кавычек для разделения строки, которая является частью фильтра, а строка содержит еще одну кавычку или апостроф, добавьте одну кавычку в качестве escape-символа перед одной кавычками или апострофом. Используйте аналогичный подход, если для разделения строки используется пара двойных кавычек. Если строка содержит двойную кавычку, добавьте двойную кавычку в качестве escape-символа перед двойной кавычками.

Например, в строке фильтра DASL, которая фильтрует свойство Subject , равное слову , не может, вся строка фильтра разделяется парой двойных кавычек, а внедренная строка не может быть разделена парой одинарных кавычек. В этой строке фильтра необходимо экранировать три символа: начальная двойная кавычка и конечная двойная кавычка для ссылки на http://schemas.microsoft.com/mapi/proptag/0x0037001fсвойство , а апостроф в условии значения для слова не может. Применив соответствующие escape-символы, можно выразить строку фильтра следующим образом:

filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = "не может"

Кроме того, можно использовать функцию chr(34) для представления двойной кавычки (значение символа ASCII — 34), которая используется в качестве escape-символа. Используя подстановку chr(34) для escape-символа с двойными кавычками, можно выразить последний пример следующим образом:

filter = "@SQL= " & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001f" _

& Chr(34) & " = " & "не может"

Экранирование символов в одиночных и двойных кавычках также требуется для запросов DASL с операторами ci_startswith или ci_phrasematch . Например, следующий запрос выполняет запрос на совпадение фраз для не может в теме сообщения:

filter = "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001E" _

& Chr(34) & "ci_phrasematch " & "не может"

Другим примером является строка фильтра DASL, которая фильтрует свойство Subject , равное слову , где слово stuff заключено в двойные кавычки. В этом случае необходимо экранировать вложенные двойные кавычки следующим образом:

filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'the right ""stuff"'"

Другой набор правил экранирования применяется к ссылке на свойство для именованных свойств, содержащих пробел, одну кавычку, двойную кавычку или символ процента. Дополнительные сведения см. в разделе Ссылки на свойства по пространству имен.

Date

Хотя даты и время обычно хранятся в формате даты, методы Find и Restrict требуют преобразования даты и времени в строковое представление. Чтобы убедиться, что дата отформатирована так, как ожидается в Microsoft Outlook, используйте функцию Формат . В следующем примере создается фильтр для поиска всех контактов, которые были изменены после 15 января 1999 г. в 3:30 вечера.

sFilter = "[LastModificationTime] > '" & Format("15.01.99 3:30pm", "ddddd h:nn AMPM") & "'"

Логические операторы

Логические операторы, TRUE/FALSE, ДА/НЕТ, ON/OFF и т. д., не следует преобразовывать в строку. Например, чтобы определить, включено ли ведение журнала для контактов, можно использовать следующий фильтр:

sFilter = "[Журнал] = True"

Примечание. Если вы используете кавычки в качестве разделителей с логическими полями, то пустая строка будет находить элементы, поля которых имеют значение False , а все непустые строки будут находить элементы с полями True.

Ключевые слова (или категории)

Поле Категории содержит ключевые слова типа, которое предназначено для хранения нескольких значений. При программном доступе к нему поле Категории ведет себя как текстовое поле, и строка должна точно соответствовать. Значения в текстовой строке разделяются запятой и пробелом. Обычно это означает, что нельзя использовать методы Find и Restrict в поле ключевых слов, если оно содержит несколько значений. Например, если у вас есть один контакт в категории "Бизнес" и один контакт в категориях "Бизнес" и "Социальные сети", вы не можете легко использовать методы Поиска и ограничения для получения всех элементов, которые находятся в категории "Бизнес". Вместо этого можно выполнить цикл по всем контактам в папке и использовать функцию Instr , чтобы проверить, содержится ли строка "Бизнес" во всем поле ключевых слов.

Примечание. Возможное исключение — если поле "Категории" ограничено двумя или небольшим количеством значений. Затем можно использовать методы Find и Restrict с логическим оператором OR, чтобы получить все бизнес-контакты. Например (в псевдокоде): "Бизнес" ИЛИ "Бизнес, Личное" или "Личное, Бизнес". В строках категорий регистр не учитывается.

Integer

Вы можете искать целочисленные поля с кавычками или без в качестве разделителей. Следующие фильтры помогут найти контакты, созданные с помощью Outlook 2000:

sFilter = "[OutlookInternalVersion] = 92711"

sFilter = "[OutlookInternalVersion] = '92711'"

Использование переменных в составе фильтра

Как показано в примере метода Restrict , значения из переменных можно использовать в составе фильтра. В следующем примере кода Microsoft Visual Basic показан синтаксис, в котором переменные используются в качестве части фильтра.

sFullName = "Дэн Уилсон"

' В этом подходе используется Chr(34) для разделения значения.

sFilter = "[FullName] = " & Chr(34) & sFullName & Chr(34)

' В этом подходе используются двойные кавычки для разделения значения.

sFilter = "[FullName] = """ & sFullName & """"

Использование логических операторов в составе фильтра

Допустимые логические операторы: AND, OR и NOT. Ниже приведены варианты предложения для метода Restrict , чтобы можно было указать несколько условий.

ИЛИ. Следующий код возвращает все контактные элементы, у которых в качестве категории "Бизнес" или "Личные".

sFilter = "[Categories] = "Personal" или [Categories] = "Business"

И. Следующий код извлекает всех личных контактов, работающих в корпорации Майкрософт.

sFilter = "[Категории] = "Personal" и [CompanyName] = "Microsoft"

НЕТ. Следующий код извлекает все личные контакты, которые не работают в Корпорации Майкрософт.

sFilter = "[Категории] = "Personal" and Not([CompanyName] = "Microsoft")"

Дополнительные примечания

Если вы пытаетесь использовать методы Find или Restrict с определяемыми пользователем полями, поля должны быть определены в папке, в противном случае возникнет ошибка. Нет способа выполнить операцию "contains". Например, нельзя использовать функцию "Найти " или "Ограничить " для поиска элементов с определенным словом в поле "Тема". Вместо этого можно использовать AdvancedSearch(String, Object, Object, Object) метод или выполнить цикл по всем элементам в папке и использовать функцию InStr для поиска в поле. Метод Restrict можно использовать для поиска элементов, которые начинаются с определенного диапазона символов. Например, чтобы найти все контакты с фамилией, начинавшейся с буквы M, используйте следующий фильтр:

sFilter = "[LastName] > 'LZZZ" и [LastName] < 'N'"

Применяется к