update
メソッドがフィールドを更新しない場合は、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をオーバーライドすることもできます。このメソッドは、常に AOS サーバーで実行されます。CustTable
doUpdate
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
さらに別のオプションは、メソッドへのグローバルな変更です。メソッドのヘッダーから:
テーブル内のレコードを監視するようにカーネルが設定されている場合、テーブル内のレコードが更新されたときにカーネルによって呼び出されるコールバックとして機能します。
開発者は、EventUpdate に設定されたフィールド logType を含む、すべてのフィールドが関連する値に設定されたレコードを DatabaseLog カーネル テーブルに挿入することにより、特定のテーブルの更新時にコールバックするようにカーネルを設定できます。レコードが更新されたとき、または特定のフィールドが更新されたときにカーネルがコールバックするように設定することができます。これは、logUpdate が呼び出されて設定される方法と非常によく似ています。このメソッドの呼び出しは、レコードが更新されるトランザクションで行われます。
このメソッドは、アラート ルール通知システムで使用されます。グローバルな変更 (アラート ルールなど) でない限り、これはお勧めしません。
アラート ルールは、ここで説明されているように拡張できます。