如果该update
方法不更新字段,您可以在更新方法上使用pre
事件处理程序。如果要监视表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
on 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 的方式非常相似。此方法的调用将在更新记录的事务中。
此方法由警报规则通知系统使用。我建议不要这样做,除非它是全局更改(如警报规则)。
警报规则可以按照此处所述进行扩展。