ダイアログを単にクローズしたときのイベントによって、動的アクションが起動できるようになりました。ダイアログをクローズしたときのイベントは以前からあったのですが、このイベントは画面上のボタンを押した時に発生し、単にダイアログをクローズした場合(右上にある✖️をクリックしたときなど)には発生しませんでした。
以前からあったイベントの名前はダイアログのクローズ(英語ではDialog Closed)、新設されたイベントの名前は閉じられたか取り消されたダイアログ(英語ではDialog Closed or Canceled)です。
モーダル・ダイアログのページに動的アクションを設定するなどして、ダイアログを開いたままデータの更新を行うような実装をした場合、そのダイアログをキャンセル・ボタンのクリックで閉じたときに更新済みの変更を元に戻したい、といった要件はあるかと思います。その際にキャンセル・ボタンのクリックで元に戻す処理を実装すると、ダイアログの✖️をクリックしてダイアログを閉じられると元に戻す処理が実行されません。
✖️をクリックさせないようにダイアログから消してしまう、という手段が取られることがあります。
サンプル・データセットのEMP/DEPTより作成されるアプリケーションを例にとって、実装について説明します。
ダイアログを開くベースとなるレポート(今回の例では表EMPのファセット検索)のページ・プロパティのCSSのインラインに以下の記述を加えます。
.no-close .ui-dialog-titlebar-close {display: none;}従業員の情報を編集するフォームを含む、モーダル・ダイアログのページのダイアログのCSSクラスとしてno-closeを指定します。
以上の設定を行いフォームを開くと、✖️が消えていることが確認できます。
✖️がなくなったので、ダイアログをクローズするには取消、削除、変更の適用または(上記のフォームでは表示されていませんが)作成のボタンを押す以外に方法がないように見えます。実際にはキーボードのEscを押すと、ダイアログをクローズすることができます。
イベントの発生を確認してみます。(モーダル・ダイアログではなく)レポートのページを開き、左ペインに動的アクション・ビューを開きます。
動的アクションの作成を実行します。識別の名前を閉じられたか取り消されたダイアログとします。タイミングのイベントとして閉じられたか取り消されたダイアログ、選択タイプをリージョン、リージョンとしてEmployees(モーダル・ダイアログを開くレポートのリージョン名)を選択します。
アクションとして、以下のJavaScriptを実行します。JavaScriptコンソールにEvent - 閉じられたか取り消されたダイアログと出力します。
console.log("Event - 閉じられたか取り消されたダイアログ - " + this.data.closeAction);
識別のアクションとしてJavaScriptコードの実行を選択し、設定のコードに上記を記述します。
アプリケーションを実行して、イベントの発生を確認します。
ブラウザのJavaScriptコンソールを開き、従業員のファセット検索のページより、任意の従業員の編集フォームを開きます。
取消ボタンを含むすべてのボタンをクリックによっても従業員の編集フォームは閉じるため、イベント閉じられたか取り消されたダイアログが発生します。
Escや取消ボタンを押してモーダル・ダイアログのページ(従業員のフォーム)が閉じられる時はthis.data.closeActionの値がcancelになっています。作成、変更の適用および削除ボタンのクリックの結果、モーダル・ダイアログのページが閉じられるときはthis.data.closeActionがcloseになっています。この値は補償となる処理の実行が必要かどうかの判別条件に使用できるでしょう。
取消もしくはキャンセル・ボタンのクリックで実行される処理は、フォームが存在するモーダル・ダイアログのページに実装しています。同様の処理を閉じられたか取り消されたダイアログで実行する場合、モーダル・ダイアログの呼び出し側であるレポートのページに実装することになります。処理を実装し直す場合、参照できるページ・アイテムが違うことに注意が必要です。
新たに追加されたイベント閉じられたか取り消されたダイアログの説明は以上です。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完