Клиенты и серверы автоматизации
При интеграции двух приложений одно предоставляет свои объекты для использования, а другое использует объекты первого приложения. Приложение, объекты которого доступны для других приложений, называется сервером автоматизации (иногда его еще называют компонентом). Приложение, которое использует объекты другого приложения, называется клиентом (или контроллером) автоматизации. Объекты, которые доступны для других приложений, называют объектами автоматизации.
Через объекты автоматизации приложение-сервер открывает доступ другим программам к тем своим функциям, которые могут быть им полезны. Например, текстовый редактор может открывать другим программам доступ к проверке орфографии, служба связи — доступ к созданию и отправке сообщений. Это позволяет разработчикам ускорить процесс разработки своих приложений, благодаря использованию готовых функций сервера.
Объекты приложения-сервера образуют библиотеку объектов, которая может быть подключена к приложению-клиенту путем установки ссылки в проекте VBA (см. разд. "Установка ссылок на объектные библиотеки"гл. 13). Приложение-клиент использует объекты приложения-сервера путем доступа к их свойствам и методам. При этом он имеет все те возможности, которые есть у сервера автоматизации. Например, Microsoft Excel имеет модель объектов, которая включает такие объекты, как Workbook, Worksheet, Sell и др. К этим объектам можно обращаться из Microsoft Access, а также из других приложений, поддерживающих автоматизацию.
Чтобы получить представление о работе с технологией автоматизации OLE, нужно разобраться в классификации серверов автоматизации, которые могут быть использованы в написании приложений систем управления базами данных. Существуют пять основных типов серверов автоматизации.
- Полные серверы (full servers) — это самостоятельные приложения, например Microsoft Excel и Microsoft Word, использующие автоматизацию. Данные приложения, подобно Access, предоставляют свои объекты для использования собственной версии VBA. Полные серверы называются также локальными серверами (local servers), поскольку сервер такого типа должен размещаться на том же компьютере, что и приложение клиента автоматизации.
- Серверы автоматизации (automation servers) — это серверы, которые не являются внедряемыми объектами. В качестве примера такого сервера можно привести Microsoft Access. Название Microsoft Access не содержится в списке Тип объекта (Object Type) вкладки Создание (Create New) диалогового окна Объект (Object) меню Вставка (Insert) приложений Microsoft Word или Microsoft Excel. При попытке указать файл базы данных во вкладке Создание из файла (Create From File) элемент управления Упаковщик объектов (Object Packager) пытается создать пакет из файла базы данных.
- Мини-серверы (mini-servers) — это приложения, которые могут быть запущены только из приложений-клиентов автоматизации, например Microsoft Graph (MSGraph9) или Visio Express. Приложение, являющееся мини-сервером, должно представлять собой выполнимый файл (с расширением ехе) и иметь возможность раскрывать окно приложения. Мини-серверы, отображающие объекты конкретного класса, например файлы изображений, видеоклипы и т. д., называются средствами просмотра (viewers).
- Специальные элементы управления OLE (OLE Controls) — это одна из разновидностей мини-серверов. Специальные элементы управления OLE, имеющие расширение файлов осх, кроме методов и свойств, предоставляют для использования другими приложениями еще и события. Они похожи на специальные элементы управления Visual Basic (VBXs). Некоторые элементы управления OLE, подобно VBXs, в режиме выполнения выводятся на экран, другие в режиме выполнения невидимы.
- Элементы управления ActiveX (ActiveX Controls) являются облегченной 32-разрядной версией элементов управления OLE. Такие элементы хранятся в файлах с тем же, что и у элементов OLE, расширением (осх), однако их размер на 30—50% меньше, чем у заменяемых ими элементов OLE. Элементы управления ActiveX являются основой развиваемой в настоящее время фирмой Microsoft технологии ActiveX
- Служебные серверы (process servers) — это подкласс серверов автоматизации, используемых для выполнения функций, которые не взаимодействуют с интерфейсом пользователя. Служебные серверы делятся на внешние (OutOfProc(ess)) и внутренние (InProc(ess)). Внешние серверы — это выполнимые файлы, которые запущены собственным процессом, т. е. имеют отдельную зарезервированную память. К внешним серверам можно отнести полные серверы и мини-серверы. Внутренние серверы используют память совместно с приложением клиента автоматизации. К внутренним серверам относятся специальные элементы управления ActiveX.
Внешние серверы взаимодействуют с приложением клиента, используя упрощенный механизм удаленного вызова процедур (Lightweight Remote Procedure Calls, или LRPC). В свою очередь, внутренние серверы (OLE DLL) используют вызовы обычных функций Windows. Благодаря этому, внутренние серверы быстрее реагируют на инструкции клиента, чем внешние. Внешний сервер можно' разместить на удаленном компьютере, а для взаимодействия с ним можно использовать DCOM. Такой внешний сервер называют удаленным объектом автоматизации (Remote Automation Object— RAО).
Замечание
Служебные серверы не входят в официальную классификацию серверов автоматизации. Этот термин используется для того, чтобы различать невидимые управляемые служебные объекты сервера, работающие в фоновом режиме, и управляемые объекты, обладающие видимым представлением в режиме выполнения или режиме Конструктора Microsoft Access. Чаще всего служебные серверы используются при создании приложений баз данных, располагающих служебный сервер автоматизации между входным каналом приложения клиента и выходным каналом приложения сервера для обработки запросов приложения сервера или отслеживания ошибок данных входного канала сервера. Такие серверы невидимы для пользователя.
Одним из преимуществ автоматизации является возможность работы с управляемыми полными серверами и мини-серверами без создания видимого экземпляра сервера автоматизации. Автоматизация запускает приложение самостоятельно, без внешнего вмешательства. Если серверу не указано активизировать окно, он невидим, и в списке задач его имя не содержится.