チュートリアル
承認ワークフローを作成する
BPMN 2.0 を使用して、承認ワークフローを作成します。
HTML と GSP を使ってフォームを作成して、タスクリストから表示できるようにします。
このチュートリアルで作成されるファイルをあらかじめエクスポートしたファイルは、こちらからダウンロードできます。
はじめる前に
- /WEB-INF/processes に保存されている BPMN 2.0 ファイルが更新されると、プロセス定義の履歴が作成されるため、/WEB-INF/processes に保存されている BPMN 2.0 ファイルを直接編集しないようにしてください。 別のフォルダにコピーしてから編集を行い、編集が完了したら /WEB-INF/processes に戻すようにします。
- このチュートリアルで作成されるファイルをこちらからダウンロードできます。 ダウンロード後に管理者としてログインして、ルートフォルダからインポートしてください。 インポートすると、承認ワークフローが自動的にデプロイされ、タスクリストから表示できるようになります。
- 動作を確認するために、1 人目の承認者 (user1) 、2 人目の承認者 (user2) 、申請者 (ユーザ ID は任意) の 3 つのユーザアカウントが必要です。
- 申請書類は /var/approvals に保存されます。 このフォルダに対して、承認者には「読み取り」、申請者には「読み取り + 書き込み」のアクセス権を付与してください。 アクセス権の設定方法については、こちらの手順を参照してください。
モデリングシナリオ
次のシチュエーションをモデル化したいと思います。
支払い、請求、契約などの申請の場合、2 人の異なる人物による 2 つの承認が必要です。
申請が処理される前に、2 人の人物から確実に承認されるようにする必要があります。
2 人の承認者が実行する手動の手順についてもモデル化する必要があります。
承認の決定にはタスクリストを使用します。
承認ワークフローを BPMN 2.0 ダイアグラムで作成する
コンテンツ一覧画面でファイル名に「approvals.bpmn」を入力して、新しいファイルを作成します。
作成したファイルをクリックすると、BPMN 2.0 エディタで編集できます。
プロセスエンジン、1 人目の承認者、2 人目の承認者のそれぞれに個別のプールを使用しています。
このようにして、誰がどのプロセスを制御しているのかを明確に定義できます。
プロセスエンジンプールでは、ユーザタスクが使用されます。 これらのユーザタスクは、1 人目と 2 人目の承認者のタスクリストに表示されるタスクに対応しています。
プロセスエンジン内のユーザタスクと承認者の手動プロセス間の相互作用については、メッセージフローを使用してモデル化されます。 これらのメッセージフローは、承認者がユーザタスクを完了するために実行する手動の手順をカプセル化します。
多くの場合、承認結果をメールやチャットなどで申請者に通知するようにしますが、ここでは複雑さを軽減するために省略されています。
この BPMN 2.0 ダイアグラムは、最終的に /WEB-INF/processes/approvals.bpmn に保存・デプロイされます。
プロセスエンジンプールでは、ユーザタスクが使用されます。 これらのユーザタスクは、1 人目と 2 人目の承認者のタスクリストに表示されるタスクに対応しています。
プロセスエンジン内のユーザタスクと承認者の手動プロセス間の相互作用については、メッセージフローを使用してモデル化されます。 これらのメッセージフローは、承認者がユーザタスクを完了するために実行する手動の手順をカプセル化します。
多くの場合、承認結果をメールやチャットなどで申請者に通知するようにしますが、ここでは複雑さを軽減するために省略されています。
この BPMN 2.0 ダイアグラムは、最終的に /WEB-INF/processes/approvals.bpmn に保存・デプロイされます。
承認ワークフローで使用するフォームを作成する
この承認ワークフローには、次の 2 つのフォームが必要です。
1 つは書類を選択して承認申請を送信するフォーム、もう 1 つは申請内容を確認でき、承認を決定するフォームです。
1 人目と 2 人目の承認者が使用するフォームは共通です。
承認申請フォーム
書類を選択して、承認申請を送信するフォームです。
- コンテンツ一覧画面から /content/bpm/SendRequest.html に承認申請フォームを作成します。
- フォームがロードされると、bpm オブジェクトを引数として onFormLoad 関数が呼び出されます。 bpm オブジェクトは、後でプロセスを開始するときに必要となるため保存しておきます。
- 「申請する」ボタンが押されたら、bpm.processDefinition.start メソッドを呼び出してプロセスを開始します。 start メソッドには、ビジネスキー (businessKey) とプロセスに渡す変数 (variables) を指定します。
- approver1 と approver2 の 2 つの変数に、それぞれ 1 人目と 2 人目の承認者のユーザ ID が指定されます。 プロセスが「承認を開始する (ユーザタスク) 」に到達すると、承認者のタスクリストにタスクが表示されます。
承認決定フォーム
申請内容を確認して、承認または却下するフォームです。
- コンテンツ一覧画面から /content/bpm/StartApproval.gsp に承認決定フォームを作成します。 フォームに渡される URL パラメータを、簡単に受け取れるようにするため、GSPで作成されます。
- フォームがロードされると、bpm オブジェクトを引数として onFormLoad 関数が呼び出されます。 bpm オブジェクトは、後でユーザタスクを完了するときに必要となるため保存しておきます。
- 「承認する」または「却下する」ボタンが押されたら、bpm.task.complete メソッドを呼び出してユーザタスクを完了します。 承認結果 (1 人目は approved1、2人目は approved2) は complete メソッドに渡され、プロセス変数に保存されます。
- ユーザタスクを完了すると、承認者のタスクリストからタスクが消えます。
- フォームのデザイン面に制約はありません。機能やクリエイティブを自由に作成することができます。
- この例では承認者を固定していますが、プロセス変数を更新することで、ワークフロー途中での変更もできます。
- ここで作成されたフォームの他に、承認申請フォームで送信されるファイルを保存するための Groovy スクリプトと、保存されているファイルを承認決定フォームからダウンロードするための Groovy スクリプトがフォームと同じフォルダに作成されます。 これらのスクリプトの内容については、ダウンロードしたファイルを確認してください。
承認ワークフローにフォームを関連付ける
作成した 2 つのフォームを承認ワークフローに関連付けます。
- CMS 内のコンテンツと直接的に関連付けるには、「jcr」スキームを使用します。
- 「jcr:///bin/cms.html」 に続く「/bpm/SendRequest.html」が CMS のパスです。 「jcr:///bin/cms.html」プレフィックスを使用する場合は、CMS のパスの先頭にある「/content」を除いて指定します。
承認ワークフローに分岐条件を設定する
プロセスが承認決定フォームで保存された承認結果に従い、条件分岐してプロセスを進められるように、分岐点の矢印を編集します。
承認ワークフローをデプロイする
承認ワークフローを使用するには、/WEB-INF/processes に approvals.bpmn をコピーします。
タスクリストから表示して承認ワークフローの動作を確認する
承認ワークフローをデプロイしたら、タスクリストから表示して実際の動作を確認します。