_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 , определяемые пользователем поля должны существовать в папке. В противном случае код создаст ошибку о том, что поле неизвестно. Вы можете добавить поле в папку, отобразив выбор поля и нажав кнопку Создать.
Этот метод не может быть использован и вызовет ошибку со следующими свойствами:
BodyCategoriesChildrenClassCompaniesCompanyLastFirstNoSpaceCompanyLastFirstSpaceOnlyContactNamesContactsConversationIndexDLNameEmail1EntryIDEmail2EntryIDEmail3EntryIDEntryIDHTMLBodyIsOnlineMeetingLastFirstAndSuffixLastFirstNoSpaceAutoResolvedWinnerBodyFormatInternetCodePagePermission | LastFirstNoSpaceCompanyLastFirstSpaceOnlyLastFirstSpaceOnlyCompanyLastFirstNoSpaceAndSuffixMemberCountNetMeetingAliasNetMeetingAutoStartNetMeetingOrganizerAliasNetMeetingServerNetMeetingTypeRecurrenceStateReplyRecipientsReceivedByEntryIDRecevedOnBehalfOfEntryIDResponseStateSavedSentSubmittedVotingOptionsDownloadStateIsConflictMeetingWorkspaceURL |
Создание фильтров для методов поиска и ограничения
Синтаксис фильтра зависит от типа поля, по которого выполняется фильтрация.
Строка (для текстовых полей)
При поиске в текстовых полях можно использовать апостроф (') или двойные кавычки (""), чтобы разделить значения, входящие в фильтр. Например, все следующие строки работают правильно, если поле имеет тип 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'"