НАБОР ДАННЫХ PRODATASET
DATASET - представляет собой своего рода временную базу данных состоящую из набора временных таблиц. Временные таблицы, составляющие DATASET, могут быть как независимыми, так и связанными по определенным полям подобно таблицам в базе данных.
DEFINE [NEW [SHARED]]
DATASET dataset-name
[NAMESPACE-URI namespace] [NAMESPACE-PREFIX prefix]
[XML-NODE-NAME node-name] [SERIALIZE-NAME serialize-name]
[REFERENCE-ONLY]
FOR buffer-name1 [,..., buffer-nameN]
DATA-RELATION [data-rel-name1]
FOR parent-buffer-name, child-buffer-name
RELATION-FIELDS (parent-field1, child-field1
[, parent-fieldN, child-fieldN])
[REPOSITION]
[NESTED]
[RECURSIVE]
[NOT-ACTIVE]
...
dataset-name - идентификатор DATASET;
buffer-nameN - буферы временных таблиц, составляющих DATASET;
data-rel-nameN - идентификатор N-ой связи таблиц. По умолчанию принимает значения RelationN, где N - порядковый номер начиная с 1 для каждого DATASET;
parent-buffer-name - буфер родительской таблицы;
child-buffer-name - буфер дочерней таблицы;
parent-fieldN - N-е поле родительской таблицы, по которому осуществляется связь с дочерней таблицей;
child-fieldN - N-е поле дочерней таблицы, по которому осуществляется связь с родительской таблицей.
Определение связанных таблиц осуществляется в DATA-RELATION
DATA-RELATION [data-rel-name1] FOR parent-buffer-name, child-buffer-name
При этом, как родительская, так и дочерняя таблицы должны быть из числа составляющих DATASET.
Поля, посредством которых реализуется связь таблиц, указываются попарно в RELATION-FIELDS. Первым указывается поле родительской таблицы, затем соответствующее ему поле дочерней таблицы и т.д.
RELATION-FIELDS (parent-field1, child-field1 [, parent-fieldN, child-fieldN])
Опция NESTED определяет вложенность строк дочерней таблицы в строки родительской таблицы в структурах XML и JSON при экспорте данных DataSet-a в данные форматы.
Связь таблиц DATA-RELATION объявленная с опций NOT-ACTIVE является неактивной. Так в Dataset может быть объявлено несколько связей (DATA-RELATION) для одних и тех же таблиц, но активной может быть только одна из них.
Для примера, объявим три временных таблиц для формирования отчета по клиентам и имеющимся у них договорам.
- tt-reports - информация по отчету;
- tt-customers - клиенты;
- tt-loans - договора клиентов.
DEF TEMP-TABLE tt-report NO-UNDO
FIELD report-date AS DATE
FIELD report-name AS CHAR
.
DEF TEMP-TABLE tt-customers NO-UNDO
FIELD customer-id AS INTEGER
FIELD customer-name AS CHAR
FIELD cusromer-birthday AS DATE
FIELD customer-sex AS LOGICAL
FIELD customer-address AS CHAR
.
DEF TEMP-TABLE tt-loans NO-UNDO
FIELD loan-customer-id AS INTEGER
FIELD loan-number AS CHAR
FIELD loan-open-date AS DATE
FIELD loan-summ AS DECIMAL
.
Объявим DataSet состоящий из наших временных таблиц. Определим связь между таблицами tt-customers и tt-loans по полям customer-id и loan-customer-id соответственно.
DEF DATASET ds-report FOR tt-report, tt-customers, tt-loans
DATA-RELATION FOR tt-customers, tt-loans
RELATION-FIELDS(customer-id, loan-customer-id).