BPMN 2.0に含まれるタイマー・イベントを使用してみます。
タイマー・イベントを使用するには、Flows for APEXのZIPファイルのApplications/Enable_Timers以下に含まれるenable_times.sqlを実行し、DBMS_SCHEDULERのジョブを開始する必要があります。
enable_timers.sqlをAPEXワークスペースで実行するには、ワークスペースのスキーマにCREATE JOB権限が必要です。以下のコマンドにて、権限を付与します。
grant create job to <ワークスペース・スキーマ>;
Autonomous Databaseの場合、ユーザーADMINでデータベース・アクションに接続し、SQLの画面より実行します。
APEXに戻り、SQLワークショップのSQLスクリプトを開き、ファイルenable_timers.sqlをアップロードし、実行します。
Flows for APEX 22.2に添付されているenable_timers.sqlの内容です。FLOW_TIMERS_PKG.STEP_TIMERSを10秒ごとに実行しています。
-- Enable timers in BPMN --
--
-- execute in your workspace schema
--
-- Make sure you have the privilege "create job"
-- If not, execute the following statement as sys first:
-- grant create job to <my_workspace_schema>;
begin
dbms_scheduler.create_program
( program_name => 'APEX_FLOW_STEP_TIMERS_P'
, program_type => 'STORED_PROCEDURE'
, program_action => '"FLOW_TIMERS_PKG"."STEP_TIMERS"'
, number_of_arguments => 0
, enabled => true
, comments => 'Update timers status and move the flow forward.'
);
dbms_scheduler.create_job
( job_name => 'APEX_FLOW_STEP_TIMERS_J'
, program_name => 'APEX_FLOW_STEP_TIMERS_P'
, job_style => 'LIGHTWEIGHT'
, start_date => systimestamp
, repeat_interval => 'FREQ=SECONDLY;INTERVAL=10'
, enabled => true
);
end;
以上の設定にて、フロー・ダイアグラムに含まれるタイマー・イベントが有効になります。
フロー・ダイアグラムを修正します。ステータスがdraftのバージョンのフロー・ダイアグラムをフロー・モデラーで開きます。今までの記事通りに作業をされていると、フロー・モデル経費精算のバージョン2がステータスdraftで編集可能になっているので、それを開きます。
上司や部門長による申請のレビューにて却下された申請はタスク申請の修正へ回され、従業員による再提出待ち(タスク申請の修正)になります。このとき、一定の時間までに再提出されない場合は経費精算の申請を破棄(ステータスをabandonedに変更)し、ワークフローを完了します。
ツール・バーより中間境界イベントを作成を選択し、タスク申請の修正の上に配置します。
配置したイベントのタイプの変更(レンチのアイコン)より、タイマー境界イベントを選択します。
タイマー境界イベントのプロパティを設定します。名前は再申請の待機とします。詳細のタイマー定義タイプは日付または期間のどちらかを選択できます。今回は期間を選択します。どちらも書式にOracleまたはISO 8601を選択できます。
タイマー定義にはISO 8601に従った値を指定します。今回はPT1Mとし、1分以内に再申請がなければ申請を破棄します。(PはPeriod - 期間、TはTime - 時間、1Mで1分の意味です)。
タイマー境界イベント再申請の待機の操作ツールよりタスクを追加を実行します。作成されたタスクのタイプをスクリプトタスクに変更し、タスクの名前は申請の破棄とします。
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_prcs_id flow_processes.prcs_id%type; | |
l_business_ref flow_process_variables.prov_var_vc2%type; | |
l_expe_id tuto_expenses.expe_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); | |
l_expe_id := to_number(l_business_ref); | |
-- set expense status | |
update tuto_expenses expe | |
set expe.expe_status = 'abandoned' | |
where expe.expe_id = l_expe_id | |
; | |
end; |
タスク申請の破棄の操作ツールより終了イベントを追加を実行します。作成された終了イベントの名前は支払いせずに完了とします。
以上でタイマー・イベントを使ったフロー・ダイアグラムに変更されました。変更の適用を実行して変更を保存します。
変更したフロー・ダイアグラムはバージョンのステータスをreleasedにするまで、稼働中のアプリケーションでは使用できません。とはいえreleasedに変更すると、フロー・ダイアグラムに間違いがあったときにバージョンをあげる必要があります。
こちらの記事で作成した経費精算 - 開発中のアプリケーションは、ステータスがdraftのバージョン2を使うように作られています。このアプリケーションを使って動作を確認します。
従業員にて経費精算の申請を行い、上司が却下をします。その状態で1分待ちます。もう一つ、経費精算の申請を行い部門長が却下します(金額は100米ドルより高額にします)。
両方の申請ともに、ステータスはabandonedになります。
上司に却下された後、再申請が時間切れになったフローをビューワーで確認します。
部門長に却下されたフローです。
どちらも期待通りのフローになっています。
変更したフロー・ダイアグラムのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/20221221-2347_%E7%B5%8C%E8%B2%BB%E7%B2%BE%E7%AE%97_draft_2.bpmn