Red Hatの梅野です。
前回の記事は、タスクのリストを表示させるために必要なソースをご紹介しました。 今回はタスクを実行するところをご紹介します。
タスクとは
タスクにはいろいろな種類がありますが、全てのタスクの役割は同じで、「誰にアサインされたか」「いつからこの仕事を行ったか」「いつこの仕事を終えたか」を記録するものです。 タスクはアサインされた人しか実行できません。タスクのアサインは、Business Central上のプロセスを設計するツールより設定できます。
アクターのところに、Business Centralに登録してあるユーザを指定します。 アクターの人が病気等で仕事ができない状況の場合、仕事が止まることを意味します。そうすると困った状況になりますので、独裁的承認がどうしても必要等の特段の理由のない限り、ここはBusiness Centralに登録されているグループを指定しておくのが良いです。グループには複数のユーザーを登録することができます。
グループの指定の方法はまた別途ご紹介するとして、今回はシンプルにユーザをここで指定しておきます。
タスクの開始
タスクを開始するには、下記のような実装が必要です。
String SERVERURL = "http://localhost:8080/kie-server/services/rest/server"; String USER ="rhpamAdmin"; String PASSWORD = "PASSWORD"; MarshallingFormat FORMAT = MarshallingFormat.JSON; String CONTAINER = "Seal_1.0.0"; String ProcessID = "Seal.Seal_Process"; KieServicesConfiguration config = KieServicesFactory.newRestConfiguration(SERVERURL, USER, PASSWORD); config.setMarshallingFormat(FORMAT); KieServicesClient client = KieServicesFactory.newKieServicesClient(config);
ここまでは前回と同じです。(これ以降はこの共通部分は省略します)
UserTaskServicesClient taskClient = client.getServicesClient(UserTaskServicesClient.class); taskClient.startTask(ContainerID, TaskID, UserID);
ContainerID と TaskID と UserID は、前回紹介したTask Listから取得して渡してください。 TaskID はlongである必要があります。UserIDはこのタスクを実行するユーザーで、Business Centralで登録されている必要があります。TaskListが取れている時点でUserIDはわかっているかと思います。
タスクの終了
タスクを終了するには、下記のような実装が必要です。
taskClient.completeTask(ContainerID, TaskID, UserID, null);
何か残したい場合は、4つ目の引き数にMap<String, Object> 型で渡してあげるとtaskVariableとして記録されます。承認行為の時の申し送り的な使い方になります。
タスクを一気に終了
通常は、作業を開始するときにタスクの開始、作業を終了するときにタスクの終了を行い、そのタスクにどれだけの時間が掛かったのかを統計的に取得し、業務の効率化を目指すものです。なので、start / end を別個に呼ぶことが必要ですが、画面を一瞬見ればわかる等、人間側か2回アクションしたくないときもあります。その場合、下記のような実装をすることで、自動的にstart / end を呼んでくれ、1アクションで済むことがあります。
taskClient.completeAutoProgress(ContainerID, TaskID, UserID, null);
Process Automation Managerの中では、あくまでも Start - End を記録します。このAPIを呼び出すと、後続にある停止すべきノードで止まります。停止すべきノードとは、Human TaskやEnd node等です。 これを行うと、各タスクのStart - End にかかる時間は数ミリ秒となり、人的作業でどれくらい掛かったかはわからなくなります。統計情報が必要な場合は、completeAutoProgress ではなく、startTaskとcompleteTaskを呼ぶように実装します。
使う上での注意
ご紹介したとおり、Process Automation Manager は、全てのタスクやノードにて、必ず「Start」「End」が記録されます。普段見ることは無いと思いますが、PAMが使用するDBの中の"nodeinstancelog" テーブルに全て記録されます。つまり、PAMというアプリケーションが毎回DBに記録に行くため、パフォーマンスはPersistenceであるDBの速度に大きく依存します。応答速度は超高速とは言えません。従って、同時接続数や必要な応答速度をよく検討した上で、マシンのスペックやサブスクリプションのCore数を決定する必要があります。 また、プロセス内での各タスクのトランザクションは保証されますが、RESTや他のDB等、外部連携タスクを利用した場合のXAには対応していません。なので、「サービス連携」をPAMで行おうとすると、commitに失敗した場合の復旧策は製品にはありません。PAMを「サービス連携基盤」と考えるのは間違った使い方になります。サービス連携でトランザクション保証が必要な場合は、Red Hat Process Automation ManagerではなくRed Hat Fuseを利用してください。
PAMはあくまでも、「申請・承認行為が必要なビジネスの流れにおいて、各案件の状態を一元的に管理する」という使い方になります。
次回はTaskをGroupでの指定した場合の方法をご紹介します。
うめの(id:mumeno)