Red Hatの梅野です。
前回の記事は、プロセスをスタートさせるために必要なソースをご紹介しました。
今回は、タスクリストを取得することを紹介したいと思います。 タスクリストとは、「自分がやらなきゃいけない仕事の一覧」、「仕掛中の仕事の一覧」、「終わった仕事の一覧」みたいなことです。
プロセスとタスク
まずはプロセスとタスクの違いです。

この絵で書かれている、連結された丸や四角の全体をプロセス、四角のものをタスクと言います。 プロセスをスタートさせるとプロセスインスタンスというのが作られ、プロセスインスタンスIDが割り当てられます。プロセスサービスに関する操作は全て、このプロセスインスタンスIDがキーになります。
jBPMでは、プロセス全体を扱うプロセスサービスと、その中のタスクを扱うタスクサービスの2つのサービスの組み合わせになっています。なぜこのようなアーキテクチャになっているかというと、一つのプロセスの中で同時並行で複数のタスクが実行される場合、一つのプロセスインスタンスIDだけでは取り扱いが難しくなるためです。ですので、プロセスインスタンスIDが紐付けられたタスクサービスに問い合わせ・指示を行う必要があります。
タスクリストの取出し方
Java client API でのソースです。
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);
List<TaskSummary> tasks = taskClient.findTasksAssignedAsPotentialOwner(USER, 0, 10);
TaskSummary ts = new TaskSummary();
for (int i=0; i < tasks.size(); i++) {
ts = (TaskSummary)tasks.get(i);
System.out.println("ID:" + ts.getId() + " status:" + ts.getStatus());
}
ご覧いただくとおわかりかと思いますが、 KieServicesClient のインスタンス clientを作成するところまでは、前回のソースと全く同じです。 プロセスのスタートを行うときは、ProcessServiceClient のインスタンスを KieServicesClient から作りましたが、今回はUserTaskServiceClient をKieServicesClientから作っています。
今回はタスクリストを呼ぶのに、アサインされたユーザー名をキーとして作成したので findTasksAssignedAsPotentialOwner() を呼びましたが、他には
findTasksAssignedAsBusinessAdministrator() findTasksByStatusByProcessInstanceId(); findTasksByVariable(); findTasksByVariableAndValue(); findTasksOwned();
のような取出し方もあり、目的にあったリストの取り出しが可能です。それぞれ、pageとpageSize を引数で指定できるので、大量のリストを取る必要がある場合は適切に指定します。
TaskListの戻り値
findTasksほにゃらら で返されるのはTaskSummaryというクラスです。json で返されたデータをみると、このような情報が取れることがわかります。
{
"id":21,
"name":"FinanceCheck",
"subject":"",
"description":"",
"status":"Reserved",
"priority":0,
"skipable":false,
"actualOwner":"rhpamAdmin",
"createdBy":"rhpamAdmin",
"createdOn":1547705169785,
"activationTime":1547705169785,
"expirationTime":1547705169785,
"processInstanceId":22,
"processId":"Seal.Seal_Process",
"containerId":"Seal_1.0.0",
"parentId":-1
},
...
戻り値はjson型もしくはXML型で受け取ることができます。 HTMLに表示するところでリストを表にすることで、「自分がやらなきゃいけない仕事一覧」が取得できます。 一番上にある"id" というのがtask ID になります。タスクに対する操作はtask IDを使用して行います。 日付はjava.util.Date型が文字列で返されます。 processInstanceIdというのが、このタスクに紐付いているProcessInstanceIDです。
次回はタスクを実行するところをご紹介します。
うめの(id:mumeno)