system.form_status 状態を使用しようとしましたが、いくつかのテキストまたはリスト項目を変更した後に確認すると、system.form_status に変更はありません。「クエリ」メッセージを受け取るだけですが、「変更済み」メッセージを受け取る必要があります。
では、どうすれば問題を解決できますか?前提条件はありますか?
system.form_status 状態を使用しようとしましたが、いくつかのテキストまたはリスト項目を変更した後に確認すると、system.form_status に変更はありません。「クエリ」メッセージを受け取るだけですが、「変更済み」メッセージを受け取る必要があります。
では、どうすれば問題を解決できますか?前提条件はありますか?
(ベース テーブル ブロック内の) ベース テーブル アイテムを変更すると、ステータスは CHANGED になります。アイテムを変更してもステータスが変わらない場合、それはコントロール アイテムである必要があります。
コントロール項目が変更された場合、レコード & ブロック & フォームのステータスは変更されません。
これを回避する 1 つの方法は、アイテムにトリガー (WHEN-VALIDATE-ITEM) を追加して、レコードのステータスを強制的に変更することです。トリガーで、レコード ステータスを「CHANGED」に設定します。新しいレコードを処理するために、いくつかのロジックも必要になる場合があります。たとえば、次のようになります。
IF GET_RECORD_PROPERTY(NAME_IN ('SYSTEM.TRIGGER_RECORD'),
NAME_IN ('SYSTEM.TRIGGER_BLOCK'),
STATUS) = 'QUERY' THEN
Set_Record_Property (NAME_IN ('SYSTEM.TRIGGER_RECORD'),
NAME_IN ('SYSTEM.TRIGGER_BLOCK'),
STATUS,
CHANGED_STATUS);
ELSIF GET_RECORD_PROPERTY(NAME_IN ('SYSTEM.TRIGGER_RECORD'),
NAME_IN ('SYSTEM.TRIGGER_BLOCK'),
STATUS) = 'NEW' THEN
Set_Record_Property (NAME_IN ('SYSTEM.TRIGGER_RECORD'),
NAME_IN ('SYSTEM.TRIGGER_BLOCK'),
STATUS,
INSERT_STATUS);
END IF;
または(これはおそらくより良い方法です)、WHEN-VALIDATE-ITEMトリガーで、同じレコードのデータベース項目の値を何らかの値に設定します(他の回答はこちら)。これにより、記録ステータスが自動的に正しく設定されます。