[SOA/BPM] 期限切れしたタスクの判断とタスクの再開

BPMに関する質問&回答その4です。

Q) HumanTaskに期限を設定したんだけど、期限切れしたHumanTaskを再開できるようにするにはどうすればいい?
A) HumanTaskの状態(state)を把握し、その上で、タスクの更新アクティビティを使います。

まず、タスクの状態は、HumanTaskの結果ではないことに注意する必要があります。HumanTaskの結果は、事前に定義した応答を返すもの(Q1における結果)であって、タスクの状態を返すものではありません。

右図はHumanTaskの実行データ(通常、execDataという名称で作成されます)の構造を示していますが、この中で、HumanTaskの結果は、一番下のoutcomeに相当します。
タスクの状態は、中ほどに赤枠で囲んだstateで知ることができます。

タスクの状態が[期限切れ]の場合、outcomeには何も文字が含まれません。そのため、outcomeだけを使って判断すると、期限切れであっても後続の定義に従って、フローが進みます。

タスクの状態を調べるためには、このstateをチェックします。stateは列挙型で以下の値をとります。
  • ASSIGNED
  • ALERTED
  • COMPLETED
  • ERRORED
  • EXPIRED
  • INFO_REQUESTED
  • OUTOME_UPDATED
  • STALE
  • SUSPENDED
  • WITHDRAWN
期限切れの場合はEXPIREDが設定されますので、

bpmn:getDataOutput('execData')/ns:systemAttributes/ns:state

で値を取得し、その内容で判断します。

期限切れになったHumanTaskを再開するには様々な方法がありますが、今回は更新タスクを使います。アクティビティは以下のような図柄です。



このアクティビティは、HumanTaskのプロパティを変更するために使いますが、今回の場合は期限切れしたタスクを再開する、という操作に使います。更新タスクに関する詳細情報は、以下のドキュメントをご覧ください。

Oracle® Fusion Middleware Oracle Business Process Managementでの開発 12c (12.1.3)
更新タスクを使用したユーザー・タスクの更新(日本語)
https://docs.oracle.com/cd/E57014_01/bpm/bpm-develop/human_task_bpmpd.htm#CIHBDGJA

Oracle® Fusion Middleware Developing Business Processes with Oracle Business Process Management Studio
Updating User Tasks Using Update Tasks (英語)
http://docs.oracle.com/middleware/1213/bpm/bpm-develop/human_task_bpmpd.htm#BPMPD11010

タスクの更新アクティビティのプロパティを開き、[実装]タブで、再開したいタスクと、操作(今回の場合は再開)を指定します。


もしかすると、
「期限切れしたタスクを再開するには、排他ゲートウェイで条件分岐し、再度ユーザータスクに遷移させればいいんじゃないの?」
と推測される方もいらっしゃるかもしれませんが、その手法は使えません。
実際にその方法を確認されるとすぐにわかりますが、タスクフォームは表示できても、値を更新し、その値をBPMプロセスへ反映させる、つまりHumanTaskの結果を返すことはできません。これは、期限切れになったタスクに対し、操作ができないようになっているからです。

0 件のコメント:

コメントを投稿