原文はこちら。
https://blogs.oracle.com/ateamsoab2b/entry/bpm_11g_task_execution_data
最近、お客様から「プロセスが却下された業務上の理由をプロセスに参加した人全員に通知したい」という要件を提示されました。これは複雑な問題でした。というのは、ビジネスプロセスが一般的な制御プロセスと多くノ独立したサービスと言われるプロセスに分割されるためです。そのため、各ヒューマンタスクを通過した後にデータが格納される場所と、そのアクセス方法を調査することにしました。
このブログではタスクの実行データを詳解し、"拒否通知"パターンの設計を概説します。
タスク実行データ
BPM 11gのHumanTaskが完了すると、"execData"構造体が配置されていて、"出力データのアソシエーション"から利用可能です。
この要素を広げてみると、多くのデータが入っていることがわかります。
ダンプを取って、分析することにしました。以下はexecDataの内容で、シンプルHumanTaskがスイムレーン中のプロセスオーナーであるユーザ(jausten)に割り当てられていて、承認された状態です。
興味深いと感じた部分を赤で囲んでいます。誰が更新したか、いつタスクを更新したか、結果はどうだったかがわかります。
利用可能なデータが膨大であるために、何ができて、コンポジットの詳細からADF UIの詳細に至るまでわかってしまいます。この構造体の形式を完全に理解する場合には、SOA MDSにあるXSD、WorkflowTask.xsdを確認しましょう。
却下通知のパターン
さて、データの在処がわかったので、データの収集や、そのデータで何をしているのかを調べてみます。
BPM 11gでプロセスの分解がかなり可能であると信じています。特に再利用コンポーネントやコンポーネントのライフサイクルを個別に管理したい場合はお役に立つと考えています。
Step 1
XSDを作成して、タスクデータの詳細情報を格納できるようにします。
ここでご注意頂きたいのは、配列の個々のインスタンスの要素ならびに配列そのものの要素に対して定義しています。これは"データアソシエーション"エディタで配列を操作する際に重要になります。
Step 2
個々の配列インスタンスを表す要素や配列を表す要素に相当するビジネスオブジェクトやデータオブジェクトを作成します。
Step 3
各ヒューマンタスクの出力アソシエーションで、タスク実行データから関連するデータを格納します。現行バージョン(原文執筆当時はPS4FP)のデータアソシエーションエディタが配列を取り扱う方法が原因で、配列の最初の要素を「コピー」し、残りの要素を「後ろに挿入」する必要があります。
最初の要素
最初に、execDataを個々の要素にコピーした上で、個々の要素を配列にコピーしています。
上図の(2)をよくご覧下さい。
アクションは「コピー」であり、括弧"[]"が配列インスタンスから削除されていることがわかります。
残りの要素
ほぼ同じですが、最後の「コピー」が「後ろに挿入」になっています。
Step 4
このデータを使ってループしながら通知を送るサービスを作成します。「マルチインスタンスサブプロセス」と通知アクティビティを使って簡単に作成します。
マルチインスタンス・サブプロセスをよく見てみましょう。
「ユーザ」の「通知タイプ」を使います。これはユーザが好む通知手段を使うという意味です。ここでは単に配列の要素で必要なフィールドを埋めていきます。
Step 5
残りは、却下時にこの通知プロセスをサービスとして呼び出すように設定します。
0 件のコメント:
コメントを投稿