Автоматизация ER/Studio через Delphi 2009 – начало работы (Pawel Glowacki)

By: Vladimir Panarin

Abstract: В недавнем сообщении в своем блоге Pawel Glowacki, CodeGear EMEA Evangelist, рассказывает о том, как можно автоматизировать работу ER/Studio, используя Delphi 2009.

Автоматизация ER/Studio через Delphi 2009 – начало работы

Pawel Glowacki (из его блога на http://blogs.codegear.com/pawelglowacki/2008/08/13/38513)

Месяц назад я был в Торонто на технической презентации от Embarcadero. Там консультанты по ПО, менеджеры и все прочие технари обсуждали продукты и технологии CodeGear и DatabaseGear, планы на их счет и, самое главное, создание командного духа нашей новой большой семьи. Сразу после презентации я отправился на прогулку по летней Хорватии, что и стало причиной задержки в написании этой статьи.

Должен заметить, что 95% приложений, написанных на Delphi и C++Builder, используют какую-либо базу данных. В то время как Delphi дает весь спектр возможностей по созданию приложений БД, она не нацелена на полностью кросс-платформенное моделирование баз данных, как ER/Studio. Я использовал много сторонних программ для своих баз данных, но я просто поражен возможностями ER/Studio.

Прежде, чем присоединиться к Borland/CodeGear/Embarcadero я потратил 5 лет на создание приложений в Delphi 3-5, связанных с Excel, создающих прекрасно оформленные хорошо детализированные таблицы, наполненные данными из большого финансового отдела одного из крупнейших банков Польши. Некоторые мои коллеги боялись, что для них не останется работы, если будут Delphi-приложения, генерирующие огромные файлы Excel. :-)

Свои первые впечатления от написания кода автоматизации (automation code) в Delphi я получил после великолепной статьи "Delphi и Microsoft Office: автоматизация Excel и Word" ("Delphi and Microsoft Office: Automating Excel and Word") от Charlie Calvert’а, который сейчас работает над C# в Microsoft. Другим прекрасным источником информации в то время был отличный сайт "Techvanguards" от Binh Ly. Сейчас там есть очень хорошая коллекция ссылок на ресурсы по Delphi Automation (OLE/COM/DCOM/Automation/ActiveX - Delphi knowledge base).

Пройдет некоторое время, пока продукты CodeGear и DatabaseGear глубоко интегрируются, но кое-что возможно уже сейчас. Работу ER/Studio можно автоматизировать через OLE Automation, ее богатую объектную модель можно использовать через множество существующих VBA-макросов. Почему бы ни сделать один шаг вперед и не автоматизировать работу ER/Studio, используя Delphi? 

В этой статье я шаг за шагом расскажу о создании VCL-приложения в Delphi для Win32, которое запускает ER/Studio, показывает номер ее версии и закрывает ее. Ничего особенного, просто отправная точка для более сложных сценариев. Я буду использовать доступную в настоящий момент версию ER/Studio 7.6.0 и бета-версию Delphi 2009 aka Tiburon.

В Delphi в меню "Components" есть мастер (wizard) "Import Component", который может на основе библиотеки типов COM сгенерировать VCL-компоненты, имеющие те же функции, что и классы, описанные в библиотеке типов. Если Вы хотите установить эти компоненты в Палитру компонентов – Вам нужно просто создать проект пакета ("Package" project), добавить в него модуль Delphi, сгенерированный мастером, и подключить пакет к IDE. В Delphi 2009 мастер "Import Component" стало использовать еще легче, об этом рассказывается в блоге "Tiburon Sneak Peek: Import Component Wizard" Chris Bensen’а. Вы можете начать прямо с мастера, проект пакета будет сгенерирован для Вас автоматически. Также очень полезным оказалось добавление поисковых функций на странице "Registered Type Libraries", так что больше Вам не придется вручную просматривать список всех зарегистрированных библиотек типов, который обычно бывает очень большим.

Импорт библиотеки типов ER/Studio в Delphi

Прежде всего, убедитесь, что ER/Studio и RAD Studio установлены на Вашем компьютере. После этого запустите "CodeGear RAD Studio" и выберите в главном меню "Components", а там – пункт "Import Component". После этого на экране появится мастер "Import Component".

Hide image

На первой странице "Personality, Framework and Platform" выберите "VCL for Delphi Win32" и щелкните по кнопке "Next >>". Учтите, что если Вы запустили RAD Studio через ярлык "Delphi 2009", эта страница не появится, потому что выбор используемых IDE настроек (personality) уже сделан.

Hide image
 

На следующей странице выберите пункт "Import a Type Library" и нажмите "Next >>".

Hide image

Следующая страница называется "Registered Type Libraries". Здесь мы можем использовать новые поисковые функции Delphi 2009 и найти "ER/Studio Type Library", которую можно найти в файле "C:\Program Files\Embarcadero\ERStudio7.6\ERSTUDIO.exe".

Hide image
Click to see full-sized image 

На следующей странице Вы можете задать имя страницы в Палитре компонентов, куда будут установлены сгенерированные компоненты. Я написал "ER Studio", но написать можно все, что угодно. Также удостоверьтесь, что установлена галочка "Generate Component Wrappers" и нажмите "Next>>".

Hide image
Click to see full-sized image

На следующей странице мы выберем новую опцию Delphi 2009 "Install to New Package", которая избавит нас от необходимости создавать проект пакета вручную.

Hide image

На следующем экране нужно указать имя и расположение для нового проекта пакета и необязательное пояснение к проекту, которое будет отображаться в списке установленных пакетов. Я назвал проект "D2009ERS76" и положил его в папку с демоверсиями для Delphi 2009, но, опять же, можно задать все, что угодно.

Это последний экран мастера. Вся необходимая информация предоставлена, поэтому после нажатия на кнопку "Finish" мастер сгенерирует новый проект пакета и импортирует библиотеку типов ER/Studio в модуль "ERStudio_tlb.pas". Сейчас самое время сохранить проект, просто нажав "Ctrl+S" или выбрав "File \ Save".

Hide image
Click to see full-sized image

Вначале Вы увидите множество ошибок в секции "Errors" окна "Structure", связанные с некоторыми комментариями в сгенерированном модуле, начинающимися не с "//". Эти ошибки легко исправить. Просто выберите эти строки кода в сгенерированных блоках комментариев, которые начинаются не с "//" и нажмите "Ctrl+/", чтобы автоматически закомментировать их. Самый быстрый способ найти эти строки – попытаться скомпилировать проект. Это можно сделать через меню "Project \ Compile", либо щелкнув правой кнопкой по проекту в "Project Manager" и выбрав "Compile" и контекстного меню, либо просто нажать "Ctrl+F9". После того, как все ошибочные строки будут закомментированы, Вы увидите сообщение "Done: Compiled".

 Hide image
 

Есть еще одна нетривиальная вещь, которую нужно сделать, прежде чем можно будет установить пакет в IDE.

Не допускается иметь в Палитре компонентов более одного компонента с одним и тем же именем. В Delphi по умолчанию установлен компонент "TShape", один из сгенерированных компонентов носит такое же имя. Чтобы установить пакет ER/Studio в Палитру компонентов, нужно дать сгенерированному компоненту "TShape" какое-нибудь другое имя, например, "TShapeERS". И в этом нам поможет функция "Rename" рефакторинга Delphi.

Для начала найдем объявление "TShape = class(TOleServer)" в сгенерированном модуле. Для этого просто нажмите "Ctrl+F" – на экране появится диалог "Find Text", введите в поле для поиска "TShape = class" и нажмите OK. Установите курсор на идентификатор "TShape", нажмите правую кнопку мыши и выберите в контекстном меню "Refactoring \ Rename" (или просто нажмите сочетание клавиш "Shift+Ctrl+E"). Появится диалоговое окно "Rename".

Hide image

В поле "New name" введите "TShapeERS" и нажмите OK. После этого появится вкладка "Refactoring" со списком всех мест, которые затронет рефакторинг. Просто щелкните по кубику Рубика или нажмите "Ctrl+R" чтобы применить рефакторинг и заменить все "TShape" на "TShapeERS".

Hide image
 

Теперь мы готовы установить компоненты в Палитру компонентов. Сохраните проект, например, нажав "Ctrl+S". После этого щелкните правой кнопкой по имени проекта ("D2009ERS78.bpl") в Менеджере проектов и выберите в контекстном меню пункт "Install". Проект будет скомпилирован и на экране появится информационное сообщение с подтверждением того, что наш пакет был установлен, и списком имен всех зарегистрированных компонентов.

Hide image
Click to see full-sized image

Да, впечатляющий список! :-) Если я правильно посчитал, всего добавилось 208 новых компонентов. Видно, что многое было автоматизировано ;-)

Вот мы и закончили импорт библиотеки типов ER/Studio в IDE и можем использовать сгенерированные компоненты в VCL-приложениях Delphi. Выберите "File \ Close All", чтобы закрыть проект пакета.

Простая связь Delphi и ER/Studio

Давайте попробуем связаться с ER/Studio из Delphi-приложения. Выберите "File \ New \ VCL Forms Application - Delphi", чтобы создать пустое приложение. Выберите "File \ Save All" и дайте приложению и его главной форме любое имя, которое Вам нравится. Я выбрал "ERSVersionInfo" для проекта и оставил "Unit1" для главной формы.

Если Вы раскроете в Палитре компонентов новую вкладку "ER Studio", то увидите все новые компоненты, готовые к тому, чтобы поместить их на форму. С какого начать?

Hide image
Click to see full-sized image

В папке, в которую была установлена ER/Studio, есть файл справки "ERStudio Automation Interface Reference" (AIRef.chm), содержащий всю необходимую для начала информацию. Автоматизировать работу с ER/Studio можно из внешнего приложения или изнутри через макросы. Мы пойдем по первому пути и будем работать с ER/Studio извне через приложение Delphi VCL Forms. Согласно руководству внешние программы должны начинать работу с экземпляра объекта "Application".

Hide image
Click to see full-sized image

Начнем с того, что поместим компонент "TApplication" на форму. Просто начните набирать слово "Application" в верхней части Палитры компонентов, чтобы найти этот компонент, и дважды щелкните по нему – он добавится на форму. Для простоты просто покажем номер версии ER/Studio, установленной в данный момент.

Все компоненты, сгенерированные мастером "Import Component", происходят от класса "TOleServer" и наследуют от него некоторые публичные свойства, отображаемые в Инспекторе объектов. После добавления компонента "TApplication" на форму я изменил значения свойств "AutoConnect" и "AutoQuit" с "false" на "true", поэтому ER/Studio будет автоматически запускаться и закрываться одновременно с нашим приложением.

Hide image

Также я поместил на форму кнопку, чтобы отображать номер версии ER/Studio. Для этого в обработчике события "OnClick" этой кнопки нужно написать только одну строку.

Hide image
Click to see full-sized image

Вот и все! Просто щелкните по кнопке с зеленой стрелкой (или нажмите "F9") – приложение запустится, и Вы увидите маленькую форму с единственной кнопкой. Одновременно с запуском приложения автоматически запускается ER/Studio. Если теперь нажать кнопку "Show Version" – на экране появится следующее сообщение:

Hide image

Если Вы закроете приложение, ER/Studio также закроется.

Итог

Delphi – лучшее средство для создания Windows-приложений. Поддержка связи с внешними приложениями через COM (COM Automation) была введена много лет назад еще в Delphi 3 и по-прежнему развивается, она есть и в Delphi 2009. ER/Studio предоставляет очень богатую объектную модель, к которой можно получить доступ из внешних приложений, чтобы автоматизировать их работу. В этой статье я показал, как импортировать библиотеку типов ER/Studio в Delphi и создал очень простое приложение – начальный этап для более сложных приложений автоматизации.

Пакет VCL-компонентов ER/Studio для Delphi, готовый к установке, можно скачать на Code Central.

Вперед, Delphi! Вперед, ER/Studio! Вперед, Embarcadero!

Server Response from: ETNASC04