2022年12月23日金曜日

Flows for APEXによる経費精算アプリの作成(10) - コール・アクティビティ

 Flows for APEX 22.2より、タスクのタイプとしてコール・アクティビティを選択できるようになりました。コール・アクティビティとして別のフロー・モデルを呼び出すことができます。

経費精算のフロー・モデルの最後に呼び出されるスクリプトタスク経費の支払いコール・アクティビティに変更し、以下のフロー・ダイアグラムを呼び出す実装を行います。

条件によって、銀行振り込みとクレジットカードのどちらかを選んで支払いを実施します。


タスク経費の支払いの処理で、上記のフロー・モデルが呼び出されるようにします。現在はスクリプトタスクとして、表TUTO_EXPENSESの列EXPE_STATUSにpaidを設定しています。


タスク銀行振込の支払いでは、列EXPE_STATUSにpaidの代わりにpaid-by-bk、タスククレジットカードによる支払いでは、列EXPE_STATUSにpaid-by-ccを設定します。

上記のように実装すると、アプリケーションは以下のように動作します。動画の最後のフロー・モニターでの表示で、別のフロー・モデルが呼び出されていることがわかります。


フロー・モデル経費精算のバージョン2がステータスdraftで存在すること、およびAPEXアプリケーションとして経費精算 - 開発中が作成されていることを前提とします。

以下より、コール・アクティビティの実装を行います。


フロー・モデル支払いプロセスの作成



Flows for APEXアプリケーションのフロー管理を実行します。

モデルの作成をクリックします。


カテゴリ社内手続き名前支払いプロセスとします。バージョンです。

作成をクリックします。


フロー・モデル支払いプロセスのバージョンが作成されます。ステータスdraftです。

ダイアグラム変更をクリックし、フロー・ダイアグラムの作成を始めます。


開始イベント、終了イベント、排他ゲートウェイ、タスクをフロー・ダイアグラムに配置します。以下のように名前を付けます。

開始イベント:支払いプロセスの開始
排他ゲートウェイ(分岐):支払い方法の選択
タスク(上):銀行振込による支払い
タスク(下):クレジットカードによる支払い
排他ゲートウェイ(合流):名前なし
終了イベント:支払いプロセスの完了


それぞれをシーケンスフローで接続します。


フロー・ダイアグラムの背景のどこかをクリックし、フロー・ダイアグラム自体を選択します。

実行コール可能はいに切り替えます。この設定変更により、このフロー・モデルが別のフロー・モデルから呼び出し可能になります。入出力変数を設定するタブが現れます。


入出力変数のタブを開きます。

変数内(入力変数がより適切な翻訳です)のプラス(+)サインをクリックし、呼び出し元のフロー・モデルから伝搬させるプロセス変数を設定します。

変数詳細名前としてPAYMENT_METHODデータ型Varchar2説明として支払い方法を入力します。

出力変数は呼び出し元に値を返すプロセス変数の設定です。今回は使用しません。


ゲートウェイ支払い方法の選択とタスク銀行振込による支払いを繋ぐシーケンスフローを選択します。

名前銀行振込とします。このシーケンスフローが選択される条件として、条件タイプ条件として以下を指定します。

:F4A$PAYMENT_METHOD = 'BANK_TRANSFER'

呼び出し元によって、プロセス変数PAYMENT_METHODに値が設定されていることを前提としています。


ゲートウェイ支払い方法の選択とタスククレジットカードによる支払いを繋ぐシーケンスフローを選択します。

名前クレジットカードとし、条件として以下を設定します。

:F4A$PAYMENT_METHOD = 'CREDIT_CARD'


タスク銀行振込による支払いを選択し、タイプスクリプトタスクに変更します。PL/SQLコードとして以下を記述します。

銀行振込のタスクが実行されたことを確認できるように、update文でexpe_statusにpaidを設定している部分をpaid-by-bkに変更します。


タスククレジットカードによる支払いを選択し、同様の変更を適用します。こちらはexpe_statusにpaidを設定している部分をpaid-by-ccに変更します。


以上でフロー・モデル支払いプロセスは完成です。


フロー・モデル経費精算の変更



フロー・モデル経費精算を開き、フロー・ダイアグラムの変更を行います。

タスク経費の支払いを選択し、タイプコール・アクティビティに変更します。


一般コール済ダイアグラム(呼び出すダイアグラムのこと)として、先ほど作成した支払いプロセスを選択します。バージョニング最新バージョンのまま変更しません。


入出力マッピングのタブを開きます。定義済変数のロードをクリックし、呼び出すフロー・ダイアグラムで定義した入出力変数の定義を反映させます。

変数内(入力変数)としてPAYMENT_METHODがロードされます。


変数内(入力変数)のPAYMENT_METHODを選択し、変数式式タイプ静的としてBANK_TRANSFERを入力します。

プロセス変数PAYMENT_METHODにBANK_TRANSFERを設定した上で、フロー・モデル支払い方法が呼ばれるようになります。静的な設定なので必ず銀行振り込みのパスが選択されますが、コール・アクティビティの動作は確認できます。


フロー・モデル経費申請の変更は以上で完了です。


フロー・ビューワーの変更



コール・アクティビティとして呼び出されたフロー・ダイアグラムも表示されるよう、フロー・ビューワーの設定を変更します。

ページ・デザイナにてフロー・ビューワーが実装されているページ(ページ番号)を開きます。

フロー・ビューワーのプラグインのリージョンを選択し、ソースWHERE句を確認します。呼び出し元のフロー・ダイアグラムとコール・アクティビティとして呼び出されたフロー・ダイアグラムは異なるため、フロー・ダイアグラムの検索条件があれば削除し、プロセスIDのみを検索条件とします。

prcs_id = :P9_PRCS_ID


属性タブを開き、設定Enable Call ActivitiesONに変更します。

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のアプリケーション作成の参考になれば幸いです。