データベース内の特定のテーブルから移入されている表形式の行を含むフォームを Oracle Forms 6i で実行しています。1 つの列には [List_Of_Values] プロパティが有効になっており、ユーザーが可能な値の中から選択できるようになっています。
リスト内の一部の値は、ユーザーがそれを行う権限を持っている場合にのみ選択できます。値が変更された後に権限を確認する [ WHEN-VALIDATE-ITEM ] トリガーを作成しました。トリガーは form_trigger_failure を発生させて、ユーザーが行った変更を保存できないようにします。
問題は、ユーザーが値を選択する権限がないことを通知された場合、フォームがキャンセルされて他の (有効) の変更も失われます。
ここに私がトリガーに書いたコードがあります
DECLARE
NEW_LOCATION VARCHAR2(100);
BEGIN
NEW_LOCATION := :BLK_MAT_STG_PLACES_PILE.STG_LOC_ID;
IF NEW_LOCATION LIKE 'OH01%' THEN
IF NOT :GLOBAL.USER_ID LIKE 'Admin%' THEN
MESSAGEBOX('You are not authorized to select this value');
/* What can I write to load the old value to this item? */
RAISE FORM_TRIGGER_FAILURE;
END IF;
END IF;
END;
ROLLBACK を試しましたが、古い値がフォームに戻りませんでした。SYNCHRONIZE も試しましたが、効果はありませんでした。データベーステーブルを再度調べて値を引き出す以外にオプションはありますか?