A) HumanTaskの状態(state)を把握し、その上で、タスクの更新アクティビティを使います。
まず、タスクの状態は、HumanTaskの結果ではないことに注意する必要があります。HumanTaskの結果は、事前に定義した応答を返すもの(Q1における結果)であって、タスクの状態を返すものではありません。
右図はHumanTaskの実行データ(通常、execDataという名称で作成されます)の構造を示していますが、この中で、HumanTaskの結果は、一番下のoutcomeに相当します。
タスクの状態は、中ほどに赤枠で囲んだstateで知ることができます。
タスクの状態が[期限切れ]の場合、outcomeには何も文字が含まれません。そのため、outcomeだけを使って判断すると、期限切れであっても後続の定義に従って、フローが進みます。
タスクの状態を調べるためには、このstateをチェックします。stateは列挙型で以下の値をとります。
期限切れの場合はEXPIREDが設定されますので、
- ASSIGNED
- ALERTED
- COMPLETED
- ERRORED
- EXPIRED
- INFO_REQUESTED
- OUTOME_UPDATED
- STALE
- SUSPENDED
- WITHDRAWN
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 件のコメント:
コメントを投稿