以上で、経費精算の一覧を表示するレポートと、経費精算を申請するフォームのページが作成されます。
ページ作成ウィザードに与えたSQLは経費精算の申請を一覧するためのもので、フォームのソースとしては適切ではありません。また、フォームのページはワークフローと連携させる必要があります。
ページ・デザイナにて、ページ経費精算の申請(ページ番号3)を開きます。
フォーム・リージョン経費精算の申請を選択します。
ソースのタイプを表/ビューに変更し、表名にTUTO_EXPENSESを指定します。
ページ・アイテムP3_EXPE_SUBMITTED_ON、P3_EXPE_ACCOUNT、P3_EXPE_SUBMITTED_BYは経費精算の申請では使用しないため、ビルド・オプションでコメント・アウトします。
ページ・アイテムP3_EXPE_COMMENT_MGRを選択します。識別のタイプを表示のみに変更し、サーバー側の条件としてタイプをアイテムはNULLではない、アイテムとしてP3_EXPE_COMMENT_MGRを選択します。
この経費申請のフォームは、上司や部門長に経費の申請が却下された際の再申請にも使われます。上司や部門長が申請を却下する際に入力するコメントは、従業員は参照するだけなのでページ・アイテムのタイプは表示のみになります。また、最初の申請時は、上司や部門長のコメントは存在しないので、ページ・アイテムが表示される必要はありません。
ページ・アイテムP3_EXPE_COMMENT_VPについても同様の設定を行います。識別のタイプを表示のみに変更し、サーバー側の条件としてタイプをアイテムはNULLではない、アイテムとしてP3_EXPE_COMMENT_VPを選択します。
このフォームから経費精算の申請および再申請を行なう際に、ページ・アイテムP3_EXPE_STATUSの値が必ずsubmittedとなるようするため、このページ・アイテムに計算を作成します。
ページ・アイテムP3_EXPE_STATUSを選択し、識別のタイプを非表示に変更します。
ページ・アイテムP3_EXPE_STATUS上でコンテキスト・メニューを表示させ、計算の作成を実行します。
実行のポイントを送信後に変更します。計算のタイプを静的値、静的値にsubmittedを指定します。結果として、このフォームが送信されるときは常に、ページ・アイテムP3_EXPE_STATUSの値はsubmittedになります。
右ペインにてプロセス・ビューを開き、ワークフローと連携するためのプロセスを作成します。
最初にワークフローを開始するプロセスを作成します。プロセスの作成を実行し、プロセス・フォーム経費精算の申請とダイアログを閉じるの間に配置します。
識別の名前をF4A:ワークフローの開始、タイプとしてFlows for APEX - Manage Flow Instance[プラグイン]を選択します。
以下の設定を行います。
Action:Create and Start
Flow Instance Name:&APP_NAME. - &APP_USER. - &P3_EXPE_AMOUNT. 米ドル
Select flow using:Component Setting
Flow (Diagram) selection based on:Name
Set Business Reference:P3_EXPE_ID
Return Instance ID into:PROCESS_ID
Set Process Variables?:Using JSON
JSONとして以下を記述します。申請した費用であるページ・アイテムP3_EXPE_AMOUNTの値が、ワークフローのプロセス変数EXPE_AMOUNTに設定されます。
[
{
"name": "EXPE_AMOUNT",
"type": "number",
"value": &P3_EXPE_AMOUNT.
}
]
フォーム上のボタン作成をクリックしたときに実行されるよう、サーバー側の条件のボタン押下時にCREATEを指定します。
開始されたワークフローのSUBFLOW_IDとSTEP_KEYを取得するプロセスを作成します。
プロセスの作成を実行し、プロセスワークフローの開始の下に配置します。
識別の名前をSUBFLOW_IDとSTEP_KEYの取得とし、タイプとしてコードの実行を選択します。ソースの位置はローカル・データベース、言語はPL/SQL、PL/SQLコードとして以下を記述します。
select sbfl_id, sbfl_step_key into :SUBFLOW_ID, :STEP_KEY
from flow_subflows_vw
where sbfl_prcs_id = :PROCESS_ID;
サーバー側の条件として、ボタン押下時にCREATEを指定します。
フロー・モデルのタスク経費精算の申請を完了するプロセスを作成します。
プロセスの作成を実行し、プロセスSUBFLOW_IDの取得の下に配置します。
識別の名前をF4A:経費精算の申請とし、タイプとしてFlows for APEX - Manage Flow Instance Step [プラグイン]を選択します。
以下の設定を行います。
Action:Complete Step
Flow Instance Info:In Page Items
Process ID Item:PROCESS_ID
Subflow ID item:SUBFLOW_ID
Step Key: STEP_KEY
Set Gateway Routing?:OFF
Auto-Branching:OFF
サーバー側の条件のボタン押下時にCREATEを指定します。
経費精算の再申請(タスク申請の修正を完了する)を行なうプロセスを作成します。
プロセスの作成を実行し、プロセス経費精算の申請の下に配置します。
識別の名前をF4A:申請の修正とします。タイプとしてFlows for APEX - Manage Flow Instance Step [プラグイン]を選択します。
設定のActionはComplete Step、Flow Instance Infoとしてfrom SQL Queryを選択し、以下をSQL Queryとして記述します。
select
sbfl_prcs_id
,sbfl_id
,sbfl_step_key
from flow_task_inbox_vw
where sbfl_business_ref = :P3_EXPE_ID;
サーバー側の条件のボタン押下時にSAVEを選択します。
経費精算の再申請の際に変更した費用で、プロセス変数EXPE_AMOUNTを更新するプロセスを作成します。
プロセスの作成を実行し、プロセス経費精算の再申請の下に配置します。
識別の名前はF4A:経費の更新、タイプとしてFlows for APEX - Manage Flow Instance Variables [プラグイン]を選択します。
以下の設定を行います。
Action : Set
Flows Instance info : In Page Items
Process ID Item : PROCESS_ID
Subflow ID Item : SUBFLOW_ID
Manage Variable(s) using : APEX item(s)
Process Variable(s) Name(s) : EXPE_AMOUNT
APEX item(s) : P3_EXPE_AMOUNT
サーバー側の条件のボタン押下時にSAVEを選択します。
最後に申請済みの経費精算を表TUTO_EXPENSESから削除する際に、その申請に紐づけて作成されているワークフロー(正確にはプロセス・インスタンス)を削除するプロセスを作成します。
プロセスの作成を実行し、プロセス経費の更新の下に配置します。
識別の名前をF4A:ワークフローの削除とし、タイプとしてFlows for APEX - Manage Flow Instance [プラグイン]を選択します。
以下の設定を行います。
Action:Delete
Select Flow using:SQL Query
SQL Queryとして以下を記述します。
select prcs_id
from flow_instances_vw
where prcs_business_ref = :P3_EXPE_ID;
サーバー側の条件として、ボタン押下時にDELETEを選択します。フォームで削除ボタンを押したときに、申請された経費精算のIDであるP3_EXPE_IDに紐づけられているワークフロー(プロセス・インスタンス)が削除されます。
一旦申請した経費精算(ステータスがsubmittedのもの)および支払い済みの経費(ステータスがpaidのもの)を再度申請するパスは定義されていないので、ボタンSAVE(変更の適用)が表示されないようにサーバー側の条件を設定します。
ボタンSAVEを選択し、サーバー側の条件のタイプは式、言語はPL/SQLを選択し、PL/SQL式に以下を記述します。
:P3_EXPE_ID is not null
and
:P3_EXPE_STATUS <> 'submitted'
and
:P3_EXPE_STATUS <> 'paid'
以上で従業員によって、経費精算の申請を行なう画面が出来ました。
レポート列やフォームの入力項目の位置や幅、ラベルなどを調整するとより良いレポートやフォームにすることができます。