ビジネスプロセス管理アプリ - タスクリストの取得

Red Hatの梅野です。

前回の記事は、プロセスをスタートさせるために必要なソースをご紹介しました。

今回は、タスクリストを取得することを紹介したいと思います。 タスクリストとは、「自分がやらなきゃいけない仕事の一覧」、「仕掛中の仕事の一覧」、「終わった仕事の一覧」みたいなことです。

プロセスとタスク

まずはプロセスとタスクの違いです。

f:id:mumeno:20190201135038p:plain
プロセスとタスク

この絵で書かれている、連結された丸や四角の全体をプロセス、四角のものをタスクと言います。 プロセスをスタートさせるとプロセスインスタンスというのが作られ、プロセスインスタンス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)

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません