Масив може бути як самостійним елементом моделі (тоді у нього є ім'я і він буде відображений в корені моделі), так і дочірнім елементом того чи іншого об'єкта.
Масив визначається типом Array
(або LazyArray
для "лінивого" масива) в дескрипторі (перше поле) набіру даних.
Це просто набір даних. Кожен рядок набіру буде відповідним об'єктом масива. Тип об'єкта визначається дескриптором набору.
Нехай маємо фрагмент коду SQL:
Він сформує в корені моделі масив
Agents
. Кожен елемент масива буде мати тип
TAgent
з наступними властивостями: Id
, Name
, Code
.
Дочірній масив завжди є вкладеним і являє собою властивість іншого об'єкта. Як правило не має імені.
В батьківському об'єкті повинна бути властивість-заповнювач зі заченнями null
і типом елементів дочірнього масива.
Зверніть увагу, що дочірній набір повинен оброблятися після основного.
Для того, щоб зв'язати масив з батьківським об'єктом, в наборі даних обов'язково повинно бути присутнім
поле з посиланням на батьківський об`єкт у вигляді [Name!ParentType.PropertyName!ParentId]
, де
Зв'язування працює наступним чином:
!ParentId
.ParentType
з відповідним ідентифікатором (зрозуміло, що цей ідентифікатор повинен бути помічений модифікатором !Id
).
PropertyName
. В масив, що відповідає цьому полю, додається елемент.Нехай маємо фрагмент коду SQL:
Він сформує в корені об`єкт
Document
типу
TDocument
з наступними властивостями: Id
, Date
, Rows
.
Властивість Rows
буде являти собою масив елементів типу TRow
з наступними властивостями:
Id
, Qty
, Price
, Sum
.
Ліниві (on demand) масиви не додаються в модель в процесі, а завантажуються при першому зверненні до властивості. Частіше за все цей механізм використовується у випадку, якщо основна модель являє собою масив, а дочірні масиви будуть потрібні не завжди, а тільки при спробі їх відобразити. Типовий приклад - перелік контрагентів, кожен з яких містить пов'язані з ним документи.
Ліниві масиви можуть бути тільки дочірніми і визначаються модифікатором LazyArray
.
Для завантаження лінивого масиву буде викликана збережена процедура завантаження моделі з суфіксом, відповідним імені
властивості основної моделі. В якості параметра @Id
їй буде переданий ідентифікатор основного елементу.
Вона повинна повернути набір, що відповідає опису масиву в основній моделі. Властивість з
модифікатором !ParentId
не обов'язкова.
Нехай маємо перелік контрагентів з переліком документів.
Він сформує в корені об`єкт
Document
типу
TDocument
з наступними властивостями: Id
, Date
, Rows
.
Властивість Rows
буде являти собою масив елементів типу TRow
з наступними властивостями:
Id
, Qty
, Price
, Sum
.
Процедури завантаження лінивих масивів також можуть мати параметри і використовувати розбиття на сторінки.