Главная » Delphi » Delphi 2006 – Отслеживаем объект ЕСО, выбранный в таблице

0

На данный момент программа находится в несколько «разобранном» состоянии. Если ее запустить, то в таблице «Планеты» появится новое поле «Star». В нем должна храниться ссылка на связанный с текущей планетой экземпляр класса Star. Но поскольку такая связь явно не установлена, в поле отображается строка <null>. Она обозначает отсутствие связи. В свою очередь, в таблице «Звезды» новые поля не добавляются: ведь каждая звезда может быть связана со множеством планет одновременно, и простым добавлением полей здесь не обойтись.

Требуется, чтобы при нажатии на кнопку Добавить планету очередной объект Planet в таблице «Планеты» сразу создавался с уже настроенной ассоциативной связью. В качестве его «родительской» звезды должен быть автоматически выбран текущий объект из таблицы «Звезды». Им будет объект, соответствующий выделенной строке этой таблицы.

Для отслеживания выделенного объекта ЕСО предназначен компонент CurrencyManagerHandle группы Enterprise Core Objects палитры инструментов. Добавим его к проекту и укажем в свойстве Name название cmhStar (отслеживание объектов Star). В качестве корневого идентификатора в свойстве RootHandle зададим ссылку на дескриптор ehStar. Так выполняется привязка данного компонента к конкретному типу отслеживаемых объектов проекта. В качестве элемента, визуализирующего отслеживаемые объекты, в свойстве BindingContext объекта cmhStar зададим таблицу DataGridl («Звезды»). Она позволяет выбрать конкретный элемент своего списка. Этой возможностью и воспользуется объект cmhStar.

Внесем дополнительные изменения в цепочку взаимосвязей между дескрипторами проекта. Новый объект cmhStar надо сделать корневым для дескриптора ehPlanet. Тогда через этот дескриптор будут доступны не все экземпляры класса Planet, а лишь те, что связаны с текущим элементом таблицы «Звезды». Для этого в свойстве RootHandle объекта ehPlanet выберем новое значение cmhStar (вместо старого rhRoot). В качестве выражения OCL в свойстве Expression объекта ehPlanet введем строку self.Planets. Здесь часть self означает ссылку на самого себя (на конкретный экземпляр класса Planet), а часть .Planets является названием одной из сторон ассоциативной связи ascToStar. Она обозначает свойство Planets, связывающее текущую звезду со множеством планет.

В редакторе выражений OCL доступ к нужной стороне ассоциативной связи (Planets или Stars) задается в разделе Roles дерева иерархии.

Запустив программу, обнаружим, что для каждой звезды (строки таблицы «Звезды») можно создать свой, уникальный набор планет (строк таблицы «Планеты»). При навигации по списку звезд в нижнем списке автоматически будет представляться планеты, соответствующие текущей звезде, выбранной в первой таблице. Планеты теперь представляются не общим списком, а по группам, согласно принадлежности конкретным звездам.

Бобровский С. И. Технологии Delphi 2006. Новые возможности. — СПб.: Питер, 2006. — 288 е.: ил.

По теме:

  • Комментарии