Функция ModifyTableRecord Назад В начало Вперед

Назначение

Модифицирует запись в новой версии произвольной таблицы. Если структура таблицы не менялась работает с оригинальной копией. Предназначена для вызова в обработчике триггера.

Важной особенностью является то, что эта функция работает только с таблицами, имеющими хотя бы один уникальный ключ (индекс). В случае наличия суррогатного ключа (nRec) используется он, в противном случае используется самый короткий из уникальных ключей. Записи в старой и новой таблицах будут идентифицироваться по этому ключу. Если запись с таким ключем не существует, то будет создана новая, в противном случае будет изменена существующая.

Стоит так же отметить, что реальное копирование мемо-поля из файла происходит именно в этой функции, а не в функциях SetTableMemo или SetAnyTableMemo, как могло бы показаться, поэтому закрывать хендлы c файлами нужно после вызова ModifyTableRecord.

Поскольку пользователь может изменить таблицы данных, добавив туда свои поля, то при конвертации необходимо эти поля перенести в новые структуры тоже. Значения этих полей копируются только в функции ModifyTableRecord. Значит, если использовать ModifyAnyTableRecord, то значения таких полей будут потеряны. Аналогичную ситуацию получим, если изменить код и имя таблицы.

Нужно помнить, что при отсутствии новой версии таблицы после вызова данной функции произойдет рекурсивное срабатывание триггера, что может привести к зацикливанию.

Описание

function ModifyTableRecord(var buffer) : word;

Параметры

buffer - буфер записи, тип которого берется из сгенерированного tbl2obj include-файла.

Возвращаемое значение

Код ошибки. (tsOk, tsInternalError).

Функция не выбрасывает исключений.

Пример

#include recAaa1.inc

handler with replace c_aaa1 on trigger aaa1 convert
action
{
  var old_buf : record as table aaa1; // буфер старой таблицы
  var new_buf : recAAA1; // буфер новой таблицы, берем из include-файла

  GetTableBuffer(old_buf);  // считываем старый буфер
  new_buf := recAAA1(old_buf); // копируем не изменившиеся поля

  ModifyTableRecord(new_buf);  // сохраняем изменения

  result := true;
}

Версия

Атлантис 5.0.02.