Если метод update
не обновляет данное поле, вы можете использовать метод обновления pre
event handler. Если вы хотите контролировать PriceGroup
поле на CustTable
столе затем создать класс с именем CustTableEventHandler
, содержащей этот метод:
public static void preUpdateHandler(XppPrePostArgs _args)
{
CustTable custTable = _args.getThis();
if (custTable.PriceGroup != custTable.orig().PriceGroup)
info(strFmt("Change price group from '%1' to '%2'", custTable.orig().PriceGroup, custTable.PriceGroup));
}
Обработчик post
события не будет работать, так как orig()
возвращает измененную запись. Также, если запись обновляется с использованием doUpdate
, ваш обработчик не вызывается.
Вы также можете переопределить aosValidateUpdate
на CustTable
, который вызывается, даже если используется doUpdate
. Этот метод всегда запускается на сервере AOS.
public boolean aosValidateUpdate()
{
boolean ret = super();
if (this.PriceGroup != this.orig().PriceGroup)
info(strFmt("Change price group from '%1' to '%2'", this.orig().PriceGroup, this.PriceGroup));
return ret;
}
Еще одним вариантом было бы глобальное изменение метода Application.eventUpdate
. Из заголовка метода:
служит в качестве обратного вызова, которая вызывается ядром при записи в таблице обновляется, при условии, что ядро было создано для контроля записей в этой таблице.
Разработчик может создать ядро перезвонить об обновлениях для данного таблицы путем вставки записи в таблицу ядра DatabaseLog со всеми полей, установленных для соответствующих значений, который включает в LOGTYPE поле установлено значение EventUpdate. Можно настроить, что ядро должно перезванивать всякий раз, когда запись обновляется или когда определенное поле обновляется. Это очень похоже на то, как вызывается и настраивается logUpdate. Вызов этого метода будет в транзакции, в которой будет обновлена запись .
Этот метод используется системой уведомлений alert rule. Я бы рекомендовал против этого, если это не глобальное изменение (например, правила предупреждения).
Правила предупреждения могут быть продлены as described here.
Возможно, это не ваш ответ, но вы можете обнаружить изменения, используя значения salesTable.orig()? http://msdn.microsoft.com/en-us/library/xrecord.orig.aspx –
@ian_scho Я не думаю, что это работает, потому что я забочусь об обновлении – AnthonyBlake