10.3.4. ヒューマンタスクサービスとの対話
Business Central コンソールは、ユーザーがヒューマンタスクサービスと対話するためのグラフィカルインターフェースを提供します。詳細は 「Business Central コンソール」 を参照してください。ヒューマンタスクサービスは、様々なメソッドを公開して、Java API からタスクのライフサイクルを管理できるようします。
タスククライアント (class org.jbpm.task.service.TaskClient) は、ヒューマンタスクのライフサイクル管理に以下のメソッドを提供しています。
public void start( long taskId, String userId, TaskOperationResponseHandler responseHandler ) public void stop( long taskId, String userId, TaskOperationResponseHandler responseHandler ) public void release( long taskId, String userId, TaskOperationResponseHandler responseHandler ) public void suspend( long taskId, String userId, TaskOperationResponseHandler responseHandler ) public void resume( long taskId, String userId, TaskOperationResponseHandler responseHandler ) public void skip( long taskId, String userId, TaskOperationResponseHandler responseHandler ) public void delegate( long taskId, String userId, String targetUserId, TaskOperationResponseHandler responseHandler ) public void complete( long taskId, String userId, ContentData outputData, TaskOperationResponseHandler responseHandler ) ...
上記のメソッドはすべて、以下の引数を取ります。
- taskId: タスクの ID。通常、ユーザーインターフェースのユーザータスク一覧で現在選択されているタスクから抽出されます。
- userId: アクションを実行するユーザーの ID。これは、アプリケーションにログインしているユーザーの ID となっています。
- responseHandler: タスクサービスとの通信は非同期であるため、結果が出ると通知がいくように応答ハンドラーを使用する必要があります。
TaskClient でメッセージが呼び出されると、メッセージが作成されサーバーに送信されます。サーバーは適切なアクションを実装しているロジックを実行します。
以下のコードサンプルは、タスククライアントの作成方法やタスクの作成、開始、完了の際にタスクサービスと対話する方法を提示しています。
//Use UUID.randomUUID() to ensure the HornetQ Connector has a unique name TaskClient client = new TaskClient(new HornetQTaskClientConnector("HornetQConnector" + UUID.randomUUID(), new HornetQTaskClientHandler(SystemEventListenerFactory.getSystemEventListener()))); client.connect("127.0.0.1", 5446); CommandBasedHornetQWSHumanTaskHandler handler = new CommandBasedHornetQWSHumanTaskHandler(ksession); handler.setClient(client); handler.connect(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); // adding a task BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler(); Task task = ...; client.addTask( task, null, addTaskResponseHandler ); long taskId = addTaskResponseHandler.getTaskId(); // getting tasks for user "bobba" BlockingTaskSummaryResponseHandler taskSummaryResponseHandler = new BlockingTaskSummaryResponseHandler(); client.getTasksAssignedAsPotentialOwner("bobba", "en-UK", taskSummaryResponseHandler); List<TaskSummary> tasks = taskSummaryResponseHandler.getResults(); // starting a task BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler(); client.start( taskId, "bobba", responseHandler ); responseHandler.waitTillDone(1000); // completing a task responseHandler = new BlockingTaskOperationResponseHandler(); client.complete( taskId, "bobba".getId(), null, responseHandler ); responseHandler.waitTillDone(1000);