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分の意味です)。
タイマー境界イベント再申請の待機の操作ツールよりタスクを追加を実行します。作成されたタスクのタイプをスクリプトタスクに変更し、タスクの名前は申請の破棄とします。
タスク申請の破棄の操作ツールより終了イベントを追加を実行します。作成された終了イベントの名前は支払いせずに完了とします。
以上でタイマー・イベントを使ったフロー・ダイアグラムに変更されました。変更の適用を実行して変更を保存します。
変更したフロー・ダイアグラムはバージョンのステータスを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