Flows for APEX 22.2より、タスクのタイプとしてコール・アクティビティを選択できるようになりました。コール・アクティビティとして別のフロー・モデルを呼び出すことができます。
経費精算のフロー・モデルの最後に呼び出されるスクリプトタスク経費の支払いをコール・アクティビティに変更し、以下のフロー・ダイアグラムを呼び出す実装を行います。
条件によって、銀行振り込みとクレジットカードのどちらかを選んで支払いを実施します。
タスク銀行振込の支払いでは、列EXPE_STATUSにpaidの代わりにpaid-by-bk、タスククレジットカードによる支払いでは、列EXPE_STATUSにpaid-by-ccを設定します。
上記のように実装すると、アプリケーションは以下のように動作します。動画の最後のフロー・モニターでの表示で、別のフロー・モデルが呼び出されていることがわかります。
フロー・モデル経費精算のバージョン2がステータスdraftで存在すること、およびAPEXアプリケーションとして経費精算 - 開発中が作成されていることを前提とします。
以下より、コール・アクティビティの実装を行います。
フロー・モデル支払いプロセスの作成
Flows for APEXアプリケーションのフロー管理を実行します。
モデルの作成をクリックします。
カテゴリを社内手続き、名前を支払いプロセスとします。バージョンは0です。
作成をクリックします。
フロー・モデル支払いプロセスのバージョン0が作成されます。ステータスはdraftです。
ダイアグラム変更をクリックし、フロー・ダイアグラムの作成を始めます。
開始イベント、終了イベント、排他ゲートウェイ、タスクをフロー・ダイアグラムに配置します。以下のように名前を付けます。
開始イベント:支払いプロセスの開始
排他ゲートウェイ(分岐):支払い方法の選択
タスク(上):銀行振込による支払い
タスク(下):クレジットカードによる支払い
排他ゲートウェイ(合流):名前なし
終了イベント:支払いプロセスの完了
それぞれをシーケンスフローで接続します。
フロー・ダイアグラムの背景のどこかをクリックし、フロー・ダイアグラム自体を選択します。
実行のコール可能をはいに切り替えます。この設定変更により、このフロー・モデルが別のフロー・モデルから呼び出し可能になります。入出力変数を設定するタブが現れます。
入出力変数のタブを開きます。
変数内(入力変数がより適切な翻訳です)のプラス(+)サインをクリックし、呼び出し元のフロー・モデルから伝搬させるプロセス変数を設定します。
変数詳細の名前としてPAYMENT_METHOD、データ型はVarchar2、説明として支払い方法を入力します。
出力変数は呼び出し元に値を返すプロセス変数の設定です。今回は使用しません。
ゲートウェイ支払い方法の選択とタスク銀行振込による支払いを繋ぐシーケンスフローを選択します。
名前は銀行振込とします。このシーケンスフローが選択される条件として、条件タイプを式、条件として以下を指定します。
呼び出し元によって、プロセス変数PAYMENT_METHODに値が設定されていることを前提としています。
ゲートウェイ支払い方法の選択とタスククレジットカードによる支払いを繋ぐシーケンスフローを選択します。
名前はクレジットカードとし、条件として以下を設定します。
:F4A$PAYMENT_METHOD = 'CREDIT_CARD'
タスク銀行振込による支払いを選択し、タイプをスクリプトタスクに変更します。PL/SQLコードとして以下を記述します。
銀行振込のタスクが実行されたことを確認できるように、update文でexpe_statusにpaidを設定している部分をpaid-by-bkに変更します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_business_ref flow_process_variables.prov_var_vc2%type; | |
l_prcs_id flow_processes.prcs_id%type; | |
begin | |
-- retrieve process id | |
l_prcs_id:= flow_plsql_runner_pkg.get_current_prcs_id; | |
-- retrieve business ref | |
l_business_ref:= flow_process_vars.get_business_ref(l_prcs_id); | |
-- set expense status | |
update tuto_expenses expe set expe.expe_status = 'paid' | |
where expe.expe_id = to_number(l_business_ref); | |
end; |
タスククレジットカードによる支払いを選択し、同様の変更を適用します。こちらはexpe_statusにpaidを設定している部分をpaid-by-ccに変更します。
以上でフロー・モデル支払いプロセスは完成です。
フロー・モデル経費精算の変更
フロー・モデル経費精算を開き、フロー・ダイアグラムの変更を行います。
タスク経費の支払いを選択し、タイプをコール・アクティビティに変更します。
一般のコール済ダイアグラム(呼び出すダイアグラムのこと)として、先ほど作成した支払いプロセスを選択します。バージョニングは最新バージョンのまま変更しません。
入出力マッピングのタブを開きます。定義済変数のロードをクリックし、呼び出すフロー・ダイアグラムで定義した入出力変数の定義を反映させます。
変数内(入力変数)としてPAYMENT_METHODがロードされます。
変数内(入力変数)のPAYMENT_METHODを選択し、変数式の式タイプは静的、式としてBANK_TRANSFERを入力します。
プロセス変数PAYMENT_METHODにBANK_TRANSFERを設定した上で、フロー・モデル支払い方法が呼ばれるようになります。静的な設定なので必ず銀行振り込みのパスが選択されますが、コール・アクティビティの動作は確認できます。
フロー・モデル経費申請の変更は以上で完了です。
フロー・ビューワーの変更
コール・アクティビティとして呼び出されたフロー・ダイアグラムも表示されるよう、フロー・ビューワーの設定を変更します。
ページ・デザイナにてフロー・ビューワーが実装されているページ(ページ番号9)を開きます。
フロー・ビューワーのプラグインのリージョンを選択し、ソースのWHERE句を確認します。呼び出し元のフロー・ダイアグラムとコール・アクティビティとして呼び出されたフロー・ダイアグラムは異なるため、フロー・ダイアグラムの検索条件があれば削除し、プロセスIDのみを検索条件とします。
prcs_id = :P9_PRCS_ID
属性タブを開き、設定のEnable Call ActivitiesをONに変更します。
Calling Diagram Identifierなど新たなプロパティが追加されますが、デフォルトからの変更は不要です。
以上でAPEXアプリケーションの変更も完了です。
アプリケーションを実行すると、先頭のGIF動画のように動作します。
今回作成したフロー・モデルのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/20221223-0254_%E6%94%AF%E6%89%95%E3%81%84%E3%83%95%E3%82%9A%E3%83%AD%E3%82%BB%E3%82%B9_%E7%A4%BE%E5%86%85%E6%89%8B%E7%B6%9A%E3%81%8D_draft_0_20221223-0225.bpmn
https://github.com/ujnak/apexapps/blob/master/exports/20221223-0254_%E7%B5%8C%E8%B2%BB%E7%B2%BE%E7%AE%97_%E7%A4%BE%E5%86%85%E6%89%8B%E7%B6%9A%E3%81%8D_draft_2_20221223-0242.bpmn
改変したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/expenseclaim-v3.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完