Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Программирование в Microsoft Office для пользователей
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

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 поисков, как программно, так и из графического интерфейса). Выглядит все это так:

  • Вначале запускаем на выполнение метод AdvancedSearch(). Этот метод принимает четыре параметра:

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), и вам вполне доступны все их свойства и методы.

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 
© 2004-2016, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru