2

ユーザーがテーブルから取得した複数行のデータを表示できるフォームを作成しました。ユーザーは行を選択し、ボタンを押してその行のデータを拒否するオプションがあります (一部の STATUS フィールドで拒否としてマークされます)。

また、ユーザーがコメントや拒否の理由を入力できる拒否確認ダイアログも設計しました。

Type プロパティを Dialog に設定して、ダイアログ キャンバスを独自のウィンドウに表示するように設定しました。

ユーザーが拒否する行を選択すると、次のコードが実行されます。

BEGIN
  GO_BLOCK('BLK_ALL_RECORDS');

  FIRST_RECORD;


    IF :FRM_ALL_ROWS.CHK_SELECT = 1 THEN
      :FRM_REJECTION.ID := :FRM_ALL_ROWS.ID;
        GO_BLOCK('BLK_REJECTION');
        SHOW_VIEW('CNV_REJECTION');
        EXIT;
     ELSE
         NEXT_RECORD;
     END IF;   

END;

また、拒否フォームには 2 つのボタンがあり、1 つは確認用、もう 1 つはキャンセル用です。ここでは、キャンセル ボタンに注目してみましょう。[キャンセル] ボタンが押されたときに実行されるコードは次のとおりです。

:BLK_ALL_ROWS.CHK_SELECT := 0;  /* Forces removal of the check mark */
GO_BLOCK('BLK_ALL_RECORDS'); 
HIDE_VIEW('CNV_REJECTION');

唯一の問題は、ダイアログ フォームが表示されると、フォームが閉じられるまで親フォームが非表示になることです。ダイアログフォームを親フォームの上に表示して、両方を表示するにはどうすればよいですか (モーダルな方法で?)

4

2 に答える 2

1

異なるキャンバス間のナビゲーションは、作業を開始するのに少し注意が必要な場合があります。フォームが目の前にない場合の問題はわかりませんが、最初にすべきことは、「メイン」キャンバスの「エントリ時に発生」キャンバスプロパティが「はい」に設定されていることを確認することです。これにより、カーソルをブロック'BLK_ALL_RECORDS'に戻すときに、このキャンバスが強制的に表示されます。

もう1つの方法は、キャンセルダイアログロジックでSHOW_VIEW()を使用して、メインキャンバスを強制的に表示することです。

于 2012-11-19T08:21:20.313 に答える