通常、の使用GO_BLOCK
またはGO_ITEM
に制限がありWHEN-VALIDATE-ITEM
ます。ただし、これを克服する方法はいくつかあります。1つの方法は、WHEN-TIMER-EXPIRED
トリガーを使用することです。方法は次のとおりです-
WHEN-TIMER-EXPIRED
Begin
if GET_APPLICATION_PROPERTY(TIMER_NAME) = 'NEW_TIMER' then
CALL_PROG_UNIT(); --This is your Procedure that calls the GO_BLOCK
/*Do rest of validation here*/
end if;
END;
WHEN-VALIDATE-ITEM
DECLARE
timer_id TIMER;
Begin
timer_id := CREATE_TIMER('NEW_TIMER',1,NO_REPEAT); --set a short timer so that the WHEN-TIMER-EXPIRED trigger is fired immediately
End;
何が起こるか-これは、CREATE_TIMER
関数が呼び出されるとすぐにタイマーを作成して期限切れにし、フォームレベルのトリガーWHEN-TIMER-EXPIRED
が期限切れのタイマー名をチェックして、を持っているプログラムユニットを呼び出しますGO_BLOCK
。お役に立てれば。
アップデート
Jeffery Kemp氏は、このソリューションが機能するという証拠を見たかったのです。だからここにあります-
BLOCK1
2つのブロックとそのBLOCK2
上にテキストアイテムがあるOracleフォーム
WVIトリガー
WTEフォームトリガー。これは、最初に関数呼び出しを使用してPROGRAM UNITP_CALL_PROC
をGO_BLOCK
呼び出し、次にフィールドでいくつかの検証を行いますNumber 2
。
ここはP_CALL_PROC
そしてここに結果があります-
と
フォームの動作を確認するためのYoutubeリンクは次のとおりです。