НАБОР ДАННЫХ 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).
Вы здесь: Главная Основы ABL НАБОР ДАННЫХ PRODATASET