|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
13.7 Другие объекты OutlookОбъекты Outlook.Explorer, Outlook.Inspector, Outlook.Search, поиск в папках Outlook Мы прошли с вами только по главной ветви объектной модели Outlook: Application — > Namespace -> Folders/MAPIFolder -> объекты элементов. Но за ее пределами находится еще очень удобных в применении объектов, о которых будет рассказано в этом разделе. Объект Explorer предназначен для отображения папки в интерфейсе Outlook. При этом вы можете выбрать для отображения встроенное или пользовательское представление (при помощи объекта View). Например, чтобы программным образом открыть папку Контакты и рассортировать в нем объекты контактов по организациям, можно использовать следующий код: Dim oNamespace As NameSpace Dim oFolder As MAPIFolder Dim oExplorer As Explorer
Set oNamespace = Application.GetNamespace("MAPI") Set oFolder = oNamespace.GetDefaultFolder(olFolderContacts) Set oExplorer = oFolder.GetExplorer() oExplorer.Display oExplorer.CurrentView = "По организациям" Просмотреть все представления, доступные для данной папки (для них используется объект View) можно так: Dim oNamespace As NameSpace Dim oFolder As MAPIFolder Dim oView As View
Set oNamespace = Application.GetNamespace("MAPI") Set oFolder = oNamespace.GetDefaultFolder(olFolderContacts) For Each oView In oFolder.Views Debug.Print oView.Name Next Еще одна полезная возможность объекта Explorer — возможность определить, какие элементы выделил пользователь. Например, чтобы получить информацию о темах всех писем, которые в настоящее время выделил пользователь в текущем окне, можно использовать код For Each Item In Application.ActiveExplorer.Selection If TypeName(Item) = "MailItem" Then Debug.Print Item.Subject Next Брат-близнец объекта Explorer — объект Inspector. Он также представляет окно Outlook, но уже с открытым на просмотр или редактирование элементом (почтовым сообщением, контактом и т.п.). Получение на него ссылки выглядит точно так же, как для Explorer, но используется он реже — в основном для проверок, не открыт ли обрабатываемый программно элемент пользователем в Outlook. Отдельную ветвь представляют объекты для поиска в Outlook. Производить поиск по Outlook приходится очень часто. Можно реализовать свой собственный поиск — просто перебором всех папок и элементов в них, начиная с папок верхнего уровня. Такой пример приведен в разделе 13.5, посвященном работе с коллекцией Folders и объектами MAPIFolder. Более эффективная, но несколько более сложная возможность — применение для поиска встроенных средств Outlook. Для нее используются два объекта — Search и Results, один метод объекта Application — AdvancedSearch() и одно событие — AdvancedSearchComplete (поскольку поиск работает в асинхронном режиме и можно одновременно запускать до 100 поисков, как программно, так и из графического интерфейса). Выглядит все это так:
Scope — диапазон поиска, то есть имя папки. Если вы точно не знаете, где вам нужно искать, можно получить имя папки программно при помощи свойства Folders объектов NameSpace и MAPIFolder. При использовании специальных символов в имени папки рекомендуется заключать его в одинарные кавычки. Filter — самый сложный параметр. Определяет, что именно мы будем искать. Синтаксис должен соответствовать синтаксису фильтров при запросах на SQL Server (можно использовать в том числе и замечательный оператор LIKE), что, в принципе, должно было быть очень удобно. Однако определить, как должны выглядеть имена столбцов, не так-то просто — скорее всего, за справкой придется обращаться на сайт Microsoft по адресам http://msdn.microsoft.com/library/en-s/cdosys/html/_cdosys_schema_mailheader.asp и http://msdn.microsoft.com/library/en-us/cdosys/html/_cdosys_schema_httpmail.asp. Например, если мы производим поиск по теме сообщения (пытаясь найти все письма, в названии которых встречается слово "Отчет"), то строка фильтра должна выглядеть так: "urn:schemas:mailheader:subject LIKE '%Отчет%'" Если же ищем точную тему "Отчет", то так: "urn:schemas:mailheader:subject = 'Отчет'" SearchSubFolders — значение этого параметра нужно установить в True, если вам нужно пройти еще и по всем вложенным папкам. Tag — просто строковый идентификатор поиска. Используется только тогда, когда вы одновременно запускаете несколько поисков, и вам нужно отличить результаты одного от результата другого. В итоге метод AdvancedSearch() вернет нам объект Search: Dim oSearch As Search Set oSearch = Application.AdvancedSearch("Inbox", "urn:schemas:mailheader:subject LIKE '%Отчет%'", True, "Search1") Поскольку поиск выполняется в асинхронном режиме, процедура, из которой мы вызвали метод AdvancedSearch(), продолжит выполняться дальше, не дожидаясь его завершения. А нам придется отслеживать окончание поиска при помощи события AdvancedSearchComplete. Для этого в Project Explorer раскрываем контейнер Microsoft Office Outlook Objects, щелкаем два раза мышью по строке ThisOutlookSession и списке объектов и событий в верхней части окна редактора кода выбираем Application и AdvancedSearchComplete() (см. рис. 13.7)
Рис. 13.7 Используем событие AdvancedSearchComplete А в этом событии используем объект Search и производный от него объект Results, как показано на этом же рисунке. Item — это обычные элементы Outlook (в данном случае объекты MailItem), и вам вполне доступны все их свойства и методы.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||