ActiveX компоненты в Centura Team Developer: принципы и технология применения

С. А. Большаков

Оглавление

Введение

Технологии программирования постоянно развиваются и совершенствуются. Несомненным достижением в этом направлении является широкое распространение взаимосвязанных друг с другом СОМ и ActiveX технологий. Поэтому неудивительно, что все крупные создатели средств разработки информационных систем прилагают значительные усилия для того, чтобы идти в ногу со временем и интегрировать новшества. Этим объясняется включение в Centura Team Developer 2000 механизмов поддержки СОМ и ActiveX (оно состоялось, если точно, еще в предыдущей версии). Необходимо отметить, что и в этом случае, по хорошей традиции, решения Centura ориентированы на пользователя: достаточно сложные проблемы могут быть решены просто, но, при необходимости, сохраняется возможность и перейти на нижний уровень для "дотошного" ручного программирования. Я такой подход называю "золотой серединой".

Технологии СОМ (Component Object Model) и механизмы ее адаптации в приложениях ActiveX обеспечивают два основных преимущества: обеспечение высокой степени использования типовых программных решений и внедрение возможностей распределенной обработки данных. Несомненно, можно найти много других достоинств, но об этом речь пойдет в другой статье ("COM технологии в CTD - просто и доступно каждому программисту " того же автора). Первое выделенное свойство позволяет рассматривать программные компоненты, как независимые "черные ящики" интегрируемые в операционную среду. За счет унифицированного стандарта интерфейса методы включенных объектов становятся доступными в приложениях самого различного применения. Распределенная обработка обеспечивает работу на разных вычислительных средствах, разных платформах технических средств, в различных сетях, включая и Интернет. Интеграции вычислительных ресурсов, а, в конечном счете, и интеллектуальных (программы разрабатывают все), несомненно, обеспечит развитие информационных технологий еще более высокими темпами.

Общие понятия AX и COM

В очень упрощенном варианте включаемые компоненты (СОМ) могут рассматриваться как библиотеки взаимосвязанных процедур, которые используют унифицированный интерфейс. Более точно, следует говорить об объектах, которые создаются в клиентских приложениях на основе общих шаблонов, поведение которых определяется правилами, заложенными в логике СОМ сервера. В этом случае изменение правил поведения в рамках сервера не приводит к значительным изменениям в клиентских приложениях, причем в максимальном случае достаточно выполнить перегенерацию этих приложений, а в минимальном случае вообще ничего не надо предпринимать. Для клиентской части обычно автоматически порождаются заголовочные файлы, описания библиотек функций и классов, которые, по сути дела, и представляют собой AX описания. В зависимости от средств разработки и свойств включаемых объектов подобные описания могут быть представлены в виде: библиотек типов - *.TLB(type library), динамических библиотек - *.DLL, объектов управления - *.OCX, исполнимых модулей - *.EXE или заголовочных файлов библиотек ( для CTD - *.APL). CTD для своей работы использует любые из видов библиотек описаний, на основе которых генерируется интерфейсные APL, которые и подключается в приложение. Подключение АХ в CTD объектов автоматизировано, для чего используется специальная встроенная утилита - AX Explorer, возможности которой мы рассмотрим ниже. Таким образом, главной составляющей создаваемых и подключаемых объектов является интерфейс (Interface), который с позиции объекта может быть: входящим (Incoming), служащим для отработки методов и функций внутри объекта и исходящим (Outgoing), служащим для отклика на события в объекте со стороны клиентских приложений.

Для унификация доступа к классам и объектам предусматриваются специальные глобальные уникальные идентификаторы (GUID), которые позволяют обратиться к нужному объекту даже в таких глобальных сетях, как Интернет. GUID задаются для: классов (CLSID); для интерфейса (IID); для диспетчирования методов-функций и событий. Последние два идентификатора локализованы внутри сервера объектов. Глобальные идентификаторы объектов регистрируются в реестре операционной системы, что дает возможность клиентским приложениям получать доступ к нужному серверу.

Proxies и stubs

Для взаимодействия клиента и сервера используются общие библиотеки, которые должны быть доступны и клиенту и серверу (СОМ libs), специальные классы и объекты Proxy для клиента и Stub для сервера. Эти специальные объекты обеспечивают упаковку и распаковку интерфейсной информации в/из передаваемых по сети сообщений. Обмен информацией в виде сообщений поддерживается протоколами RPC (Remote Procedure Call). На рисунке, расположенном ниже приведена упрощенная схема такого взаимодействия.

Рис. 1 Взаимодействие клиента и сервера.

Механизмы RPC используются, когда клиенты работают на одном компьютере, и когда они расположены на удаленных компьютерах.

Подключение AX в приложения CTD

Возможны три вида АХ объектов, подключаемых в приложения разрабатываемых в среде CTD:

  • Подключение как объекта управления (controls) - данные объекты обладают всеми составляющими: атрибутами-свойствами, функциями-методами и событиями, которые может обрабатывать приложение (пример - Calendar Control).
  • Подключение объекта, обрабатываемого другими программами (insertable)- данные объекты поддерживают и функции и события, однако эти объекты не являются визуальными, и поэтому не относятся к объектам управления. Обычно они соответствуют СОМ серверам (пример - MS WORD).
  • Подключение объекта с помощью контейнера (contained) - подключаемые через объект АХ контейнеры, взаимодействие с которыми выполняется в самом приложении. Такой механизм соответствует встроенным OLE объектам (пример - документ WORD в окне приложения).

Для визуального подключения АХ в приложения используется специальное окно, в котором необходимо нажать специальную кнопку (красный Х) и выбрать в списке нужный объект или элемент управления. После такого подключения, если объекты подключены в CTD в программу будут автоматически добавлены интерфейсные APL. На рисунке ниже панель объектов показана в состоянии выбора АХ объектов

Рис. 2 Окно выбора АХ controls и АХ объектов.

С помощью окна controls можно добавлять объекты управляющего типа и встраиваемые объекты. Кроме использования палитры объектов для подключения объектов можно использовать пункты меню, контекстное меню, ассистент кодирования и AX Explorer, который также берет на себя функции первоначального подключения АХ классов и компонент.

Возможности CTD по настройке и управлению AX

После подключения объектов в программу они становятся полноправными элементами приложения. Настройка основных параметров (размер, положение, рамки и т.д.) выполняется обычным способом, как и у стандартных объектов, посредством инспектора атрибутов. Специальные параметры настраиваются с помощью специальных окон свойств, которые встроены в АХ компоненты. Например, для компоненты Calendar Control вызывается окно настройки, представленное ниже на рисунке. Оно представляет собой совокупность закладок для настройки шрифта, цвета, способа вывода управляющего объекта на экран и т.д.

При добавлении объекта в приложения доступными становятся также: встроенные классы, новые типы сообщений, обрабатываемые приложением (message action), функции выполняемые с данным объектом (UDF- user define function) и многое другое.

Рис. 3 Пример окна настройки свойств объекта.

Использование AX Explorer

Подключение новых ActiveX объектов в среду CTD выполняется с помощью встроенной утилиты AX Explorer. Он может выполнять следующие функции: импорта интерфейсов и генерации классов в виде *.APL, просмотра библиотек объектов и контекстной справки по объектам. Ниже на рисунке представлено окно AX Explorer в режиме просмотра содержания АХ компоненты.

Рис. 4 Окна просмотра классов и свойств АХ компонента.

Данное окно показывает содержание библиотеки Microsoft Word 8.0 Object Library.apl, которая сгенерирована для MS WORD'97. Для управления данным окном предусмотрена специальная панель управления, которая дублируется контекстным меню. В левой части окна дан список классов, доступных для генерации, в правой части дано содержание выделенного класса: методы, свойства и события. В нижней части экрана дано информационное окно, в котором дано описание элементов выделенных в верхней части окна АХ Explorer.

При генерации возможно задавать следующие режимы формирования интерфейсной APL с новыми классами:

  • Stub - генерация классов без функций, для наследования и создания объектов со скрытым поведением.
  • Full - полная генерация и классов и функций и связанных классов
  • Deep - генерируются выбранные классы и те, что непосредственно связанные с выбранными в списке.

После подключения в программу объекты добавляются в дерево приложения и в OUTLINE. Далее они могут редактироваться обычным способом. Пример окна дизайнера CTD с подключенным объектом ax1 - типа AX_MSACAL_Calendar, приведен ниже на рисунке.

Рис. 5 Пример окна CTD с подключенным АХ объектом (ах1).

Рис. 6 Фрагмент окна приложения с подключенным АХ объектом (ах1).

В правой части окна проекта дизайнера CTD показаны объекты в раскрытом виде. В разделе обработки пользовательских сообщений (message action) показан специальный вид сообщений - событий, которые генерирует управляющий элемент "On NewMonth", оно инициируется при изменении месяца с помощью мышки или клавиш. Выше на рисунке приведен фрагмент окна с включенным объектом календаря. Это пример стандартного приложения описанного в документации и входящего в состав стандартных примеров CTD.

Кстати, в правой части окна приложения приведен другой объект, являющимся стандартным для CTD и построенный на основе ее собственного механизма построения объектов управления - QUICK OBJECT.

Основные классы для обеспечения работы AX в CTD

Для обеспечения работы механизмов СОМ и АХ в CTD добавлены специальные классы. Они подключаются при добавлении в программе специального модуля: Automation.apl. При подключении АХ объектов эта библиотека добавляется автоматически. Ниже в левой части окна дизайнера CTD показаны эти классы. На рисунке в правой части показано содержание класса интерфейса, в котором выделим: класс интерфейса наследуется (Derived From) от класса Object и раскрыта сгенерированная функция GetCountUser, в которой показан пример использования интерфейсной функции INVOKE c передачей и возвратом параметров.

Рис. 7 Основные классы для АХ поддержки.

Специальные классы CTD для АХ программирования имеют следующее назначение:

  • OBJECT - этот класс используется как базовый для наследования при создании классов, используемых для АХ и СОМ классов. Такое наследование обеспечивает диспетчирование сообщений и обработку событий объектов.
  • VARIANT - специальный класс предназначенный для создания объектов позволяющих гибко манипулировать типами данных при вызове методов АХ объектов и СОМ серверов. Объекты типа VARIANT могут содержать объекты и данные любого типа.
  • COM Proxy Class - является вспомогательным классом для непосредственного обеспечения интерфейса с объектами, он должен иметь своим родителем класс типа OBJECT. При автоматической генерации он включается в цепочку порождения для включения стандартных функций и обработки событий, передаваемых с сервера.
  • SAFEARRAYS - специальный функциональный класс, для порождения и манипулирования массивами объектов в динамике. Возможно использование массивов одинарной, двойной и любой размерности. Массивы могут работать с любыми типами данных, включая OBJECT и VARIANT.
  • OLEERRORINFO - класс, используемый для пользовательского диспетчирования ошибок, связанных с исключительными ситуациями в АХ объектах.

Дополнительные возможности CTD для поддержки технологии АХ

Для обеспечения механизмов OLE в CTD предусмотрен специальный тип объектов контейнерные АХ - Container controls (insertable objects). Для динамической работы с встраиваемыми объектами предусмотрены специальные функции. Ниже на рисунке приведен пример окна приложения с включенным в контейнер объектом MS WORD.

Рис. 8 Пример окна приложения с включенным объектом Wоrd.

При нажатии кнопки в окне поля переносятся в документ по установленным закладкам в тексте. Обратим внимание на то, что обеспечиваются полные возможности Wоrd, вплоть до проверки орфографии.

Отметим, что в CTD предусмотрена возможность настройки меню и панелей инструментов для включаемых объектов. Новые меню и панели инструментов включаются автоматически при активизации объекта.

Функции для встроенных объектов обеспечивают динамическое манипулирование ими и имеют следующее назначение:

    • SalActiveXAutoErrorMode - устанавливает режим обработки исключений для АХ объектов.
    • SalActiveXGetActiveObject - формирует активный объект в переменную программы.
    • SalActiveXClose - закрывает объект АХ
    • SalActiveXCreate - создает объект АХ
    • SalActiveXCreateFromData - создает объект АХ на основе существующего
    • SalActiveXCreateFromFile - создает объект АХ на основе заданного файла
    • SalActiveXDelete - удаляет объект АХ из контейнера
    • SalActiveXDoVerb - выполняет действия с объектом АХ в соответствии с командами, предусмотренными COM сервером
    • SalActiveXGetData - считывает описание объекта АХ в формате данных
    • SalActiveXGetObject - устанавливает активный объект АХ.
    • SalActiveXInsertObjectDlg - вызывает диалог для поиска и открытия объекта АХ.
    • SalActiveXOLEType - определяет состояние объекта АХ в контейнере.

    CTD поддерживает два механизма обработки исключений при работе с АХ объектами: стандартный способ обработки с использованием единого механизма и окна ошибок и пользовательского способа обработки исключительных ситуаций. В случае пользовательской обработки создаются специальные объекты класса OLEERRORINFO, анализируется коды возврата и анализируется информация, поставляемая в случае ошибки. Если AX построены по стандарту, то указываются коды ошибки, справка по ошибке, идентификаторы выполняемых процедур.

    Заключение

    Конечно, в одной статье трудно описать все особенности и тонкости использования АХ и СОМ технологий, но думаю, что данная статья будут полезна многим программистам и руководителям разработки, для того, чтобы сделать вывод о том, насколько целесообразно использовать данные механизмы в собственных проектах. На мой взгляд, простота реализации АХ и СОМ технологий в CTD подкупает, а областей применения достаточно много. Думаю также, что это станет дополнительным стимулом для знакомства с эффективными средствами разработки Centura Team Developer, сторонников которых становиться все больше у нас и заграницей.


    Страница сайта http://test.interface.ru
    Оригинал находится по адресу http://test.interface.ru/home.asp?artId=4956