Стоит задача написать триггер, который будет делать определенные действия, только если модифицированы два конкретных поля таблицы.
Нашел функцию GetTableBuffer, но не могу понять, как получить буфер таблицы до изменения и после.
Как узнать в триггере, какие поля были модифицированны?
-
- топ-софт
- Сообщения: 97
- Зарегистрирован: Пн, 24/09/2007 17:53
- Имя Фамилия: Юрий Герман
- Откуда: ТопСофт
- Контактная информация:
Вот пример. Если что непонятно, спрашивайте.
Код: Выделить всё
!------------------------------------------------------------------------------
! Пример получения значения до и после изменения
!------------------------------------------------------------------------------
Handler with replace UpdateBeforeOborot on Trigger Oborot before update
Action
{
var BufNew : record as table Oborot;
Message('Before Update GetTableBuffer=' + string(GetTableBuffer(BufNew))
+ ' BufNew.SumOb=' + string(BufNew.SumOb));
var BufOld : record as table Oborot;
BufOld.NRec := BufNew.NRec;
Message('Before Update GetAnyTableRecord=' +
string(GetAnyTableRecord(coOborot, BufOld, tiOborot11)) +
' BufOld.SumOb=' + string(BufOld.SumOb));
Result := true;
}
-
- партнер
- Сообщения: 82
- Зарегистрирован: Ср, 19/09/2007 08:35
- Имя Фамилия: Максим Шагубаков
- Откуда: Галактика-Урал
- Контактная информация:
Немного не понял
Изменил таблицу и поле на те, которые меня интересуют
Получился код
Меня смущает два момента:
1. Оба message'a показывают мне старое значение
2. Появляется не два сообщения, как я ожидал, а четыре
Подскажите пожалуйста, что я не так делаю
Причем сейчас попробовал поменять значение в строке с 5 на 3, перешел на другую.
Вернулся к начальной и опять поменял значение с 3 на 1.
При этом во всех сообщениях триггера вывелось число 5
Изменил таблицу и поле на те, которые меня интересуют
Получился код
Код: Выделить всё
Handler with replace UpdateBeforeSpSopr on Trigger SpSopr before update
Action
{
var BufNew : record as table SpSopr;
Message('Before Update GetTableBuffer=' + string(GetTableBuffer(BufNew))
+ ' BufNew.kol=' + string(BufNew.kol));
var BufOld : record as table SpSopr;
BufOld.NRec := BufNew.NRec;
Message('After Update GetAnyTableRecord=' +
string(GetAnyTableRecord(coSpSopr, BufOld, tiSpSopr01)) +
' BufOld.kol=' + string(BufOld.kol));
Result := true;
}
1. Оба message'a показывают мне старое значение
2. Появляется не два сообщения, как я ожидал, а четыре
Подскажите пожалуйста, что я не так делаю
Причем сейчас попробовал поменять значение в строке с 5 на 3, перешел на другую.
Вернулся к начальной и опять поменял значение с 3 на 1.
При этом во всех сообщениях триггера вывелось число 5