2022年7月2日土曜日

ウィザードのページを作成し複数ステップの処理を実装する

 ページの作成でウィザードを選択し、複数のステップ(画面)を踏んだ後に値を確定する処理を実装します。

こちらの記事と同じく、表EMPの対話モード・レポートとフォームのページを含むアプリケーションを元に作業を行います。

Always FreeのAutonomous Databaseを使ってアプリケーションを作成しています。最近ADBのAPEXがアップグレードされ、現時点で最新の22.1を使用しています。

アプリケーションの作成を実行します。

まずは元になるアプリケーションが作成できました。

ページの作成をクリックします。


コンポーネントからウィザードを選択します。ウィザードはダイアログの下の方にあります。


ページ定義を行います。

ウィザード名評価とします。ページ・モードモーダル・ダイアログとし、各ステップはモーダル・ダイアログが置き換わる形で遷移させます。ステップは3つ作成し、それぞれ上から、給与の設定手当の設定確定とします。モーダル・ダイアログなので、ナビゲーションOFFとします。

作成ウィザードをクリックします。

ページが3つ作成されます。


それぞれのステップとなるページを更新します。

ページ・デザイナでページ給与の設定を開きます。

Wizard Bodyのリージョン給与の設定に、従業員番号を保持するページ・アイテムを作成します。

識別名前P3_EMPNOタイプ非表示とします。ソースセッション・ステートの保持として、セッションごと(ディスク)を選択します。この設定によりP3_EMPNOに設定された値は、他のページから参照できるようになります。


給与を設定するページ・アイテムを作成します。

識別名前P3_SALタイプ数値フィールドとします。ラベル給与とします。ソースセッション・ステートの保持セッションごと(ディスク)です。


ページ・アイテムP3_SALに、現時点で保存されている給与を設定します。

ヘッダーの前にプロセスを作成します。

識別名前給与の初期化タイプコードの実行を選択します。ソースPL/SQLコードとして、以下を記述します。

select sal into :P3_SAL from emp where empno = :P3_EMPNO;


以上で、ページ給与の設定での作業は完了です。

続いてページ・デザイナで、ページ手当の設定を開きます。

Wizard Bodyのリージョン手当の設定に、手当を設定するページ・アイテムを作成します。

識別名前P4_COMMタイプ数値フィールドとします。ラベル手当とします。ソースセッション・ステートの保持セッションごと(ディスク)です。


ページ・アイテムP4_COMMに、現時点で保存されている手当を設定します。

ヘッダーの前にプロセスを作成します。

識別名前手当の初期化タイプコードの実行を選択します。ソースPL/SQLコードとして、以下を記述します。従業員番号として、前のページのページ・アイテムP3_EMPNOを参照します。

select comm into :P4_COMM from emp where empno = :P3_EMPNO;


確定のページを編集します。

変更前の給与変更後の給与変更前の手当変更後の手当を表示する4つのページ・アイテムを作成します。すべてタイプ表示のみです。これらのページ・アイテムは表示のみで他のページから参照することはないため、セッション・ステートの保持リクエストごと(メモリーのみ)にします。

変更前の給与のページ・アイテムの名前P5_SAL_PREVとし、ソースタイプSQL問合せ(単一の値を返す)SQL問合せとして以下を記述します。

select sal from emp where empno = :P3_EMPNO


変更前の手当のページ・アイテムの名前P5_COMM_PREVとし、ソースタイプSQL問合せ(単一の値を返す)SQL問合せとして以下を記述します。

select comm from emp where empno = :P3_EMPNO


変更後の給与のページ・アイテムの名前P5_SAL_NEWとし、ソースタイプアイテムアイテムとしてP3_SALを選択します。


変更後の手当のページ・アイテムの名前P5_COMM_NEWとし、ソースタイプアイテムアイテムとしてP4_COMMを選択します。


プロセス・ビューを開き、変更した給与と手当を確定するプロセスを作成します。

プロセスを作成し、Close Dialogの上に配置します。

識別名前評価の確定タイプコードの実行を選択します。ソースPL/SQLコードとして以下を記述します。ページ番号3や4にあるページ・アイテムの値を参照しています。

update emp set sal = :P3_SAL, comm = :P4_COMM where empno = :P3_EMPNO;

サーバー側の条件ボタン押下時FINISHを選択します。


ウィザードに関係するページの設定は、以上で完了です。

ウィザードの画面には、作業の進捗を表示する領域があります。進捗の表示には共有コンポーネントリストが使用されています。

今回の設定では、評価というリストが進捗の表示に使用されています。


これを開いて、少し修正します。


リスト・エントリの名前がステップ1ステップ2ステップ3となっています。これを給与手当確定に変更します。

変更したら、変更の適用をクリックします。


ページ・デザイナにて、ページの対話モード・レポートのページを開きます。

対話モード・レポートのEmployeesよりリンクされている編集フォームのページを、ウィザードのページが呼び出されるように変更します。

リージョンEmployeesを選択し、プロパティ・エディタの属性タブを開きます。


リンクターゲットを開き、ページ番号2になっている部分があれば、3に変更します。


以上でアプリケーションは完成です。アプリケーションを実行すると、この記事の先頭のGIF動画のように動作します。

今回作成したAPEXアプリケーションをこちらに置きました。
https://github.com/ujnak/apexapps/blob/master/exports/multi-step-wizard.sql

Oracle APEXのアプリケーション作成の参考になれば幸いです。