Получение информации
Outlook сохраняет разнотипную информацию в различных файлах. Информация о контактах хранится в файле Contacts (Контакты), входящие сообщения хранятся в папке InBox и т.д. Большинство пользователей, однако, изменяет структуру папок, предлагаемьи Outlook, добавляя дополнительные подпапки к заданным по умолчанию. Например, чтобы упорядочить информацию о контактах, можно создать подпапки Business и Personal в папке Contacts (Контакты). Аналогично, в папке InBox можно создать папки Business, Personal и Junk.
Типичной задачей, которую требуется решать, является поиск желаемой информации. В последующих примерах будет рассматриваться способ доступа к контактам и входящим сообщениям в папках Contacts и InBox, соответственно.
VB6 в действии: проект Contacts (Контакты)
В качестве первого примера того, как, используя средства OLE, можно работать с Outlook, будет рассмотрено приложение Contact, форма которого приведена на рис. 14.20. В этом приложении подразумевается, что все объекты, относящиеся к контактам, хранятся в папке Contacts. Если контакты пользователя организованы по-другому, например, в отдельных подпапках в папке Contacts, следует скопировать (на время) несколько соответствующих файлов в эту папку, чтобы можно было проверить приложение. Чуть позже, в параграфе "Рекурсивный просмотр папки Contacts" будет рассмотрена рекурсивная процедура просмотра всей папки Contacts (включая подпапки).
Главная форма проекта Contacts содержит два списка. Первый список заполнен названиями компаний, которые считываются из соответствующих полей каждого контакта. В этом списке названия компаний не дублируются, несмотря на то, что типичная папка Contacts может содержать несколько контактов из одной и той же компании. Чтобы просмотреть список контактов, принадлежащих одной компании, необходимо щелкнуть на ее названии. Соответствующие контакты появятся в поле списка Contacts. Теперь при каждом щелчке на имени контакта в нижней части окна формы будет отображаться подробная информация о контакте.
Программа начинает свою работу с обращения к Outlook ( после щелчка на кнопке Start Outlook). Ниже приведен код обработчика нажатия соответствующей кнопки.
Рис. 14.20. В проекте Contacts выполняется поиск информации о контактах объекта в папке Contacts в Outlook
Программа 14.18. Обращение к Outlook
Private Sub Commandl_Click ()
On Error GoTo OutlookNotStarted
Set OLApp - CreateOb^ect ("Outlook Application")
On Error GoTo NoMAPINameSpace
Set mNameSpace - OLApp GetNamespace ("MAPI")
List1.Clear
List2.Clear
Command2.Enabled = True
Exit Sub
OutlookNotStarted:
MsgBox "Could not start Outlook"
' (Невозможно запустить Outlook)
Exit Sub
NoMAPINameSpace:
MsgBox "Could not get MAPI NameSpace"
' (Невозможно получить место нахождения MAPI)
Exit Sub
End Sub
Если обращение к Outlook было успешным, кнопка View Contact становится доступной. Если щелкнуть на этой кнопке, программа создаст семейство, содержащее все объекты, находящиеся в папке Contacts, и отсортирует семейство allContacts согласно названиям компаний. Повторяющиеся названия будут удалены из списка (это обеспечивается оператором If, находящимся в конце подпрограммы). Текст программы обработчика кнопки View Contact приведен ниже.
Программа 14.19. Загрузка списка контактов
Private Sub Command2_Click()
Set allContacts = _
mNameSpace.GetDefaultFolder(olFolderContacts).Items
all Contacts.Sort = "CompanyName"
On Error Resume Next
For Each mContact In allContacts
If Trim(mContact.CompanyName) <> "" Then _
List1.Addltem mContact.CompanyName
If List1.List(List1.Newlndex) =
List1.List(List1.Newlndex - 1) Then
List1.Removeltem List1.Newlndex
Next
End Sub
Программа, которая получает контакты из выбранной (в левом окне) папки, должна быть помещена в обработчик события Click элемента ListBox.
Программа 14.20. Получение списка контактов в выбранной компании
Private Sub Listl_Click()
Dim CompanyName As String
Dim filterString As String
If List1.Listlndex = -1 Then Exit Sub
CompanyName = Listi.Text
filterString = "[CompanyName] = " " " & CompanyName & " " " "
Set thiscontact =
allContacts.Find(filterString)
If IsNull(thiscontact) Then
MsgBox "Fatal error in locating a contact.Program will exit"
' ( Фатальная ошибка при поиске контакта. Работа
' программы будет завершена)
End
End If
List2.Clear
While Not thiscontact Is Nothing
If Trim(thiscontact.FullName) <> " " Then _
List2.Addltem thiscontact.FullName
Set thiscontact = allContacts.FindNext
Wend
End Sub
Для вывода дополнительной информации о контакте потребуется еще одна программа, которая должна быть включена в обработчик события Click элемента управления List.
Программа 14.21. Вывод информации о контакте
Private Sub List2_Click()
Dim ContactName As String
Dim filterString As String
If List2.ListIndex = -1 Then Exit Sub
ContactName = List2.Text
filterString= "[FullName]= " " " & ContactName & " " " "
Set thiscontact = allContacts.Find(filterString)
If IsNull(thiscontact) Then
MsgBox "Fatal error in locating a contact. Program will exit"
' Фатальная ошибка при поиске контакта. Работа
' программы будет завершена)
End
End If
IblName.Caption = "" & thiscontact.Full Name
IblPhone.Caption = "" & thiscontact.BusinessTelephoneNumber
IblFAX.Caption = "" & thiscontact.BusinessFaxNumber
IblEMall.Caption = "" & thiscontact.EmaillAddress
End Sub
VB6 в действии: проект Messages
В проекте Messages демонстрируются приемы получения почтовых сообщений. Сообщения могут храниться в папках InBox и OutBox, а также в любых подпапках, созданных в этих папках. Программа Messages может получать сообщения только из папки InBox. Если в этой папке нет никаких сообщений, следует скопировать (на время) туда несколько входящих сообщений, чтобы проверить приложение. Чуть дальше в этой же главе будет рассмотрена процедура просмотра сообщений в папке InBox (включая вложенные подпапки) на любую глубину. Уместно напомнить, что это будет делать рекурсивная процедура.
Приложение Messages (рис. 14.21) позволяет выбирать сообщения, основываясь на информации об их отправителе или дате отправления. Критерии поиска задаются пользователем путем ввода соответствующих значений в окна, расположенные в правом верхнем углу формы. После ввода следует щелкнуть на кнопке Show Selected Messages (Показать выбранные сообщения), чтобы отобразить сообщения, отвечающие заданным критериям. Программа будет выводить только имя отправителя сообщения и тему. Затем, каждый раз, когда пользователь будет выбирать одно из сообщений в этом списке, щелкая на нем, подробная информация о нем будет отображаться в окнах соответствующих элементов управления в нижней части формы (включая текст сообщения). Если сообщение, содержит присоединенные файлы, их имена отображаются в окне сообщения. Запустите этот проект и поэкспериментируйте с ним. Впрочем, имеются две проблемы, о которых следует знать. Во-первых, приложение Messages может просматривать только сообщения в папке InBox. Если сообщения находятся в подпапках папки InBox, следует переместить (на время) несколько сообщений в папку InBox. Вторая проблема заключается в том, что имена отправителя читаются из папки Contacts. Если имена в папке Contacts не соответствуют именам, которые появляются в сообщениях, то нельзя будет увидеть сообщения, посланные выбранным контактом.
Рис. 14.21. В проекте Messages демонстрируется возможность чтения входящих сообщении Outlook из VB-приложений