Изменение данных в наборе
После того как набор данных был получен с сервера клиент может внести в него изменения и передать их обратно на сервер. Однако поскольку набор данных часто представляет собой набор записей в нескольких таблицах, то процесс обновления может быть более сложным, чем обновление отдельной таблицы.
При написании клиентского кода, который обновляет набор данных, оперируют двумя типами наборов данных:
- Рабочий набор (working dataset) – представляет собой статический набор данных, который извлекается с сервера и обновляется клиентом.
- Набор изменений (change dataset) – представляет собой динамически созданный набор данных, который позволяет одновременно хранить в наборе как оригинальные, так и изменённые данные.
На этом уроке мы рассмотрим последовательность действий, необходимых для обновления данных в наборе на стороне клиента и сервера приложений. Процесс обработки изменений состоит из следующих шагов:
- Во встраиваемом файле для набора данных убедитесь, что для каждой таблицы в наборе данных используется атрибут BEFORE-TABLE.
- На стороне клиента:
- Обновление данных в рабочем наборе.
- Подготовка набора изменений для отправки на сервер.
- Отправка набора изменений на сервер.
- На стороне сервера:
- Сохранение данных из набора изменений в базу данных.
- Возвращение обновлённого набора изменений клиенту.
- На стороне клиента выполняется слияние полученного набора изменений с рабочим набором данных. Это гарантирует, что изменения в возвращённом сервером наборе изменений будут применены к рабочему набору данных. При этом данные на сервере могут быть изменены другими пользователями или автоматически триггерами базы данных. Таким образом, этот шаг обеспечивает синхронизацию рабочего набора данных с данными в базе данных после внесения изменений.
На этом уроке мы рассмотрим базовый код, который обновляет набор данных на клиенте и сервере при условии, что обновление прошло успешно. Позже, вы узнаете, как обрабатывать ошибки в случае каких-либо сбоев во время обновления.
Кода мы описываем временную таблицу набора данных, которая будет обновляться, мы также описываем для неё таблицу BEFORE. В случае изменения записи в таблице, в таблицу BEFORE перед изменением будет сохранена предыдущая версия записи. В то же время временная таблица рабочего набора содержит всё содержимое таблицы включая изменения и называется AFTER-TABLE.
Таблицы BEFORE содержат:
- Копии изменённых и удалённых записей в состоянии, предшествующем их модификации или удалению
- Указатели на вновь созданные записи.
В следующем примере демонстрируется описание таблицы BEFORE с именем bttPOLine для временной таблицы ttPOLine, которая входит в набор данных dsPO.
DEFINE TEMP-TABLE ttPOLine NO-UNDO BEFORE-TABLE bttPOLine FIELD Linenum AS INTEGER INITIAL 0 LABEL "Line Num" FIELD Itemnum AS INTEGER INITIAL 0 LABEL "Item Num" FIELD Price AS DECIMAL INITIAL 0 LABEL "Price" FIELD Qty AS INTEGER INITIAL 0 LABEL "Qty" FIELD Discount AS INTEGER INITIAL 0 LABEL "Discount" FIELD ExtendedPrice AS DECIMAL INITIAL 0 LABEL "Extended Price" FIELD PONum AS INTEGER INITIAL 0 LABEL "Order Num" FIELD POLineStatus AS CHARACTER INITIAL "Ordered" LABEL "PO Line Status" INDEX PONumLinenum IS PRIMARY UNIQUE PONum ASCENDING Linenum ASCENDING .