1) Перейдем на закладку projDeanOfficeEcoSpace рабочего окна Delphi (см. Рисунок 8.6). На этой закладке настраивают особенности функционирования объектного пространства проекта. Пока что объектное пространство пусто – оно работает стандартным способом. Элементы модели доступны в других окнах в виде диаграмм UML.
Рисунок 8.6 – Окно настройки объектного пространства
2) Выберем в палитре инструментов компонент BdpConnection из категории Borland Data Provider, предназначенный для связи с СУБД, и добавим его в проект.
3) Настроим этот компонент на доступную базу данных. В качестве учебного примера пропишем путь к пустой базе данных DeOffDB.gbd выбранной СУБД.
4) В свойстве ConnectionString компонента BdpConnection выберем имя соединения IBConn1.
5) Настроим автоматическую связь модели MDA с выбранной СУБД. Синхронизация содержимого пространства ЕСО с данными на внешних носителях (файлах или базах данных) выполняется компонентами, наследующими базовые характеристики класса PersistenceMapper. Этот класс отвечает за отображение структуры объектного пространства в схемы представления данных, например реляционные. Добавим к проекту компонент PersistenceMapperBdp из категории Enterprise Core Objects. Он предназначен для раскладки объектного пространства в схемы баз данных, доступ к которым происходит по технологии BDP.NET. Этот компонент располагается в окне projDeanOfficeEcoSpace рядом с объектом BdpConnection1 (экземпляром компонента BdpConnection).
6) Свяжем компонент PersistenceMapperBdp через свойство Connection с объектом BdpConnection1 (см. Рисунок 8.7). Компонент PersistenceMapperBdp полностью ответствен за все аспекты автоматического сохранения и загрузки копии объектного пространства модели в выбранную базу данных. Фактически, добавив компонент PersistenceMapperBdp к проекту, мы тем самым реализовали все основные аспекты взаимодействия приложения MDA с базой данных.
Рисунок 8.7 – Настройка связи ECO с СУБД
7) Сгенерируем схему базы данных. Компонент PersistenceMapperBdp самостоятельно создает в выбранной базе данных специальные таблицы, поля и отношения между ними. В этих таблицах хранятся объекты пространства ЕСО. В контекстном меню компонента PersistenceMapperBdp выберем пункт, обеспечивающий автоматическую настройку всех нужных свойств для конкретной СУБД. В случае использования СУБД Interbase нужный пункт имеет вид Interbase [dialect3] setup, в случае СУБД Microsoft SQL Server – SQL Server setup и так далее. В нашем случае выбираем пункт Interbase [dialect3] setup, так как используется СУБД Firebird 2.0 (см. Рисунок 8.8).
Рисунок 8.8 – Настройка свойств СУБД
8) Сгенерируем таблицы, описывающие структуру объектного пространства. Для этого нажмем кнопку Generate Schema в нижней части окна, представляющего пространство ЕСО. В текущей базе данных автоматически сформируются таблицы, содержащие поля для хранения модели проекта (см. Рисунок 8.9).
9) В ходе генерации схемы среда Delphi проверит содержимое базы данных. Если в ней имеются таблицы, не имеющие отношения к текущей модели, будет предложено их удалить. По умолчанию режим удаления лишних таблиц выключен.
10) Компонент PersistenceMapperBdp, настроенный на конкретную СУБД, надо задействовать как связующее звено между объектным пространством ЕСО и СУБД. Для этого обратимся к текущему объектному пространству проекта и щелкнем на свободном месте окна projDeanOfficeEcoSpace. В свойстве PersistenceMapper в окне Инспектора объектов Properties для объектного пространства зададим ссылку на объект PersistenceMapperBdp1 (единственный экземпляр компонента PersistenceMapperBdp). Связь объектного пространства с СУБД установлена.
Рисунок 8.9 – Автоматическая генерация схемы модели
Далее нам необходимо представить создаваемые объекты модели (экземпляры классов Кафедра и Преподаватель) в таблице. Объект следует добавлять в таблицу, удалять его и обновлять БД по нажатию кнопок Добавить, Удалить и Сохранить соответственно. Проделаем всю работу исключительно с помощью визуальных средств Delphi, не прибегая к ручному программированию.
Создание интерфейса
1) Перейдем к окну Проектировщика для главной формы проекта WinForm (вкладка Design). Переименуем стандартное название главной формы. Назовем ее wfMain, а сам класс TWinForm переименуем в TMain в свойстве Name категории Design. Свойство Text (категория Appearance) отвечает за название заголовка окна, введем в него строку, например «Главная форма». Это окно станет родительским в разрабатываемом приложении, согласно требованиям создания MDI-контейнеров.
2) В свойстве IsMdiContainer (категория Window Style) главной формы выберем значение True.
3) Создадим новую форму командой File > New > Other. Выберем значок ECO Enabled Windows Form из вкладки New ECO Files (категория Delphi for.NET Projects). В окне проектировщика появится новая форма. Эта форма будет дочерней – а значит отображаться внутри главной. Так как в ней будем представлять список преподавателей выбранной кафедры, назовем созданную форму wfLecturer, а сам класс – TLecturer. Введем в свойство формы Text строку «Преподаватели».
4) Создадим главное меню на родительской форме для обращения к дочерним формам. Поместим на Главную форму компонент MainMenu. В верхней части формы появиться строка меню, в начале которой находится область ввода текста. Чтобы создать первый пункт меню, надо сделать щелчок в области ввода текста и ввести название пункта меню. Назовем пункт меню Подсистемы. В нижнюю область пункта Подсистемы введем название команды меню – Преподаватели (см. Рисунок 8.10).
Рисунок 8.10 – Настройка главного меню
5) Выберем форму wfLecturer, вкладку Code. В окне появится код формы. Перед командой implementation объявим переменную, ответственную за создание дочернего окна Преподаватели:
var
callLect: TLecturer;
6) Перейдем к Главной форме. Чтобы в Главной форме создать дочернюю, подключим к ней форму wfLecturer командой File > Use Unit. В появившемся окне Use Unit выберем форму wfLecturer (Преподаватели). На событие выбора пункта меню Преподаватели пропишем следующие операции:
callLect:= TLecturer.Create(EcoSpace);
callLect.MdiParent:= self;
callLect.Show;
7) Запустим приложение. Теперь по нажатию на пункт Преподаватели внутри родительского окна появляется дочернее окно Преподаватели (см. Рисунок 8.11).
Рисунок 8.11 – Создание дочернего окна внутри родительского
8) Приступим к представлению таблицы с объектами ЕСО на форме Преподаватели. Воспользуемся готовым компонентом DataGrid из категории палитры инструментов Data Controls. Поместим этот компонент на форму и дадим ему название dgChair (в свойстве Name). Эта таблица будет отвечать за представление экземпляров класса Кафедра (clChair). Исходно таблица должна быть пуста. В свойстве CaptionText (заголовок таблицы) введем название Кафедры.
9) Добавим еще одну таблицу dgLecturer, которая в готовом приложении будет отвечать за отображение экземпляров класса Преподаватель (clLecturer). В свойстве CaptionText введем название Преподаватели.
10) Для работы с таблицами в простом приложение потребуется пять операций: добавление и удаление данных в двух таблицах и сохранение копии ECO пространства из оперативной памяти в базу данных. Редактирование данных будет осуществляться непосредственно в полях таблиц. Добавим на форму пять кнопок – экземпляров класса Button (см. Рисунок 8.12).
Рисунок 8.12 – Добавление компонентов пользовательского интерфейса
11) Настроим автоматическое растягивание таблиц и положение кнопок при изменении размеров окна Преподаватели. Воспользуемся свойством Anchor у объектов формы. Для таблицы Кафедры зададим значения Top, Left, Right в свойстве Anchor, для таблицы Преподаватели – Top, Bottom, Left, Right, для кнопок Button1-Button4 – Top, Right, для кнопки Button5 – Bottom, Right.