ページの作成でウィザードを選択し、複数のステップ(画面)を踏んだ後に値を確定する処理を実装します。
こちらの記事と同じく、表EMPの対話モード・レポートとフォームのページを含むアプリケーションを元に作業を行います。
Always FreeのAutonomous Databaseを使ってアプリケーションを作成しています。最近ADBのAPEXがアップグレードされ、現時点で最新の22.1を使用しています。
アプリケーションの作成を実行します。
まずは元になるアプリケーションが作成できました。
ページの作成をクリックします。
ページ定義を行います。
ウィザード名は評価とします。ページ・モードはモーダル・ダイアログとし、各ステップはモーダル・ダイアログが置き換わる形で遷移させます。ステップは3つ作成し、それぞれ上から、給与の設定、手当の設定、確定とします。モーダル・ダイアログなので、ナビゲーションはOFFとします。
作成ウィザードをクリックします。
ページ・デザイナでページ給与の設定を開きます。
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となっています。これを給与、手当、確定に変更します。
変更したら、変更の適用をクリックします。
ページ・デザイナにて、ページ1の対話モード・レポートのページを開きます。
対話モード・レポートのEmployeesよりリンクされている編集フォームのページを、ウィザードのページが呼び出されるように変更します。
リージョンEmployeesを選択し、プロパティ・エディタの属性タブを開きます。
リンクのターゲットを開き、ページ番号2になっている部分があれば、3に変更します。
以上でアプリケーションは完成です。アプリケーションを実行すると、この記事の先頭のGIF動画のように動作します。
今回作成したAPEXアプリケーションをこちらに置きました。
https://github.com/ujnak/apexapps/blob/master/exports/multi-step-wizard.sql
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完