Наборы данных
ProDataSet — это очень мощная конструкция, которая расширяет функциональные возможности временных таблиц. Объект ProDataSet в основном представляет собой набор из одной или нескольких временных таблиц-членов. Он также может содержать коллекцию отношений данных между таблицами-членами.
К преимуществам использования ProDataSets относятся:
- Возможность группировать несколько временных таблиц в один объект набора данных.
- Возможность определить отношения между этими таблицами.
- Возможность связать источник данных с каждым набором данных или временной таблицей-членом.
- Возможность отслеживать изменения при манипулировании данными набора данных.
- Возможность сохранения изменённых данных обратно в источник данных.
- Возможность передачи набора данных в виде отдельного параметра из одной процедуры в другую в рамках одной сессии ABL или между сессиями.
- Упрощённое управление сложными транзакциями.
Дополнительные сведения см. в разделе «Введение в набор данных OpenEdge» и обратитесь к тренингу «Использование ProDataSet».
Концепции ProDataSet
Набор данных — это отдельный бизнес-объект в памяти, состоящий из элементов ABL, включая временные таблицы, отношения данных, источники данных и события.
Набор данных часто определяет отношения между таблицами компонентов. Кроме того, он может быть присоединён к источникам данных, которые можно использовать для заполнения набора данных данными. Изменения данных в наборе данных могут быть сохранены обратно в источниках данных. Набор данных обеспечивает сопоставление между набором таблиц базы данных или других источников данных и их представлением в памяти.
Дополнительные сведения см. в разделах «Цели ProDataSet» и «Архитектура использования ProDataSet».
Определение и использование набора данных
Основные шаги для определения и использования набора данных:
- Определить временную таблицу для каждой таблицы, которую вы хотите использовать в наборе данных.
- Определить набор данных, указав временные таблицы и их отношения (если есть).
- Идентифицировать, определить и присоединить источники данных для заполнения набора данных.
- Заполнить набор данных данными.
- Изменить данные набора данных и синхронизировать их с источником данных.
- Очистить набор данных после использования.
Первые два шага обсуждаются далее. Информацию по остальным шагам вы найдёте в «Руководстве по работе с наборами данных» или обратитесь к тренингу «Использование ProDataSet».
Определение набора данных
Временная таблица
Чтобы определить временную таблицу, используется оператор DEFINE TEMP-TABLE. При определении временной таблицы вручную указывается каждое поле и индекс временной таблицы. Вы можете определить каждое поле как определённый тип данных, наподобие оператора DEFINE VARIABLE. Чтобы определить временную таблицу с определенными полями и индексами, используется следующий синтаксис:
DEFINE TEMP-TABLE table-name [ NO-UNDO ] BEFORE-TABLE before-table-name { FIELD field-name AS data-type } { INDEX index-name [ IS [ UNIQUE ] [ PRIMARY ] ] { index-field } }.
Таблица before используется при обновлении набора данных, чтобы исходные и изменённые данные можно было сохранить в наборе данных до того, как он будет зафиксирован в базе данных.
Пример оператора DEFINE TEMP-TABLE:
/* ttOrder.i */ DEFINE TEMP-TABLE ttOrder NO-UNDO BEFORE-TABLE bttOrder FIELD OrderNum AS INTEGER FIELD OrderDate AS DATE FIELD ShipDate AS DATE FIELD PromiseDate AS DATE FIELD OrderTotal AS DECIMAL INDEX OrderNum IS UNIQUE PRIMARY OrderNum.
Набор данных
После определения временных таблиц используется оператор DEFINE DATASET для определения набора данных, состоящего из этих временных таблиц. Подобно определению временных таблиц в их собственных включаемых файлах, набор данных рекомендуется определять в своём собственном включаемом файле. Оператор DEFINE DATASET представляет собой сложный оператор с несколькими компонентами. Он используется для:
- Именования набор данных и указания временных таблиц, которые составляют набор данных.
- Указания отношения данных между этими временными таблицами.
Упрощённый синтаксис:
DEFINE DATASET dataset-name FOR temp-table-name [,temp-table-name ]... [ DATA-RELATION [data-relation-name] FOR parent-temp-table-name, child-temp-table-name RELATION-FIELDS (parent-field1, child-field1 [, parent-fieldn, child-fieldn ]...) ]
dataset–name
Указывает имя набора данных.
temp–table–name
Указывает имя временной таблицы (таблиц) в наборе данных.
data–relation–name
Задаёт объект отношения данных. Дополнительные сведения см. в разделе «Отношения ProDataSet».
parent-temp-table-name, child-temp-table-name
Идентифицирует родительскую и дочернюю временные таблицы для отношения данных.
parent–fieldn, child–fieldn
Определяет отношения между полями во временных таблицах. Для наиболее эффективного объединения поля RELATION-FIELDS должны быть проиндексированы.
В следующем примере определяется набор данных с именем dsOrderOrderLine. Он состоит из двух временных таблиц, называемых ttOrder и ttOrderLine. В нем говорится, что отношения между двумя таблицами основаны на полях ordernum. В этом примере поля в двух таблицах имеют одинаковые имена, но это не обязательно. Вы также можете указать поля отношений, которые имеют разные имена.
/* dsOrderOrderLine.i */ {include/ttOrder.i} {include/ttOrderLine.i} DEFINE DATASET dsOrderOrderLine FOR ttOrder, ttOrderline DATA-RELATION drOrderOrderLine FOR ttOrder, ttOrderline RELATION-FIELDS (ordernum,ordernum).
Вы можете определить более одного отношения данных для набора данных и включить более двух временных таблиц. Ниже приведён пример:
/* dsOrderOrderLineItem.i */ {include/ttOrder.i} {include/ttOrderLine.i} {include/ttItem.i} DEFINE DATASET dsOrderOrderLineItem FOR ttOrder, ttOrderLine, ttItem DATA-RELATION drOrderOrderLine FOR ttOrder, ttOrderLine RELATION-FIELDS (Ordernum, Ordernum) DATA-RELATION drOrderLineItem FOR ttOrderline, ttItem RELATION-FIELDS (Itemnum, Itemnum).
Вы можете узнать больше о наборах данных в «Руководстве по наборам данных» или в «Руководстве по использованию ProDatasets».