我们现在处于一个阶段,我们应该能够实现一个ReST调用,该调用可用于完成分配给 testuser 和我们刚刚列出的用户任务。
在我们刚刚使用的同一个控制器中,称为 TaskManagementController, 实现以下ReST调用:
...
@RequestMapping("/complete-task")
public String completeTask(@RequestParam(value="taskId") String taskId) {
taskRuntime.complete(TaskPayloadBuilder.complete()
.withTaskId(taskId).build());
logger.info(">>> Completed Task: " + taskId);
return "Completed Task: " + taskId;
}
这里我们使用 TaskRuntime API 的complete()方法 。我们需要与分配了任务的用户(所以testuser)一起登录才能完成它。该 /complete-task?taskId={taskId} URL路径用于该休息GET调用。
现在,按照前面的描述打包并运行应用程序。启动应用程序时,您应该看到指示所有内容都已正确实现的日志:
...
2018-08-30 10:07:36.214 INFO 36167 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/complete-task]}" onto public java.lang.String org.activiti.training.activiti7apibasicprocessusertaskservicetaskevents.rest.TaskManagementController.completeTask(java.lang.String)
...
当我们运行内存数据库时,我们之前启动的流程实例将在重新启动后消失,创建一个新的 http://localhost:8080/start-process?processDefinitionKey=sampleproc-e9b76ff9-6f70-42c9-8dee-f6116c533a6d。
我启动了以用户 mbergljung身份登录的流程实例。因为用户任务被分配给用户 testuser, 所以当我们调用 taskRuntime.tasks() 时它不会显示,我将无法完成它。
在继续下面的ReST调用之前,我们必须以testuser 身份注销并再次登录(最简单的方法是在下次ReST调用之前清除浏览器缓存)。
然后键入以下URL: http://localhost:8080/my-tasks,然后您应该得到如下所示的响应:
[
{
id: "b0a60cb6-fa2b-11e8-9c34-acde48001122",
name: "User Task 1",
status: "ASSIGNED",
assignee: "testuser",
createdDate: "2018-12-07T14:23:38.896+0000",
priority: 50,
processDefinitionId: "c68315b2-fa2a-11e8-9c34-acde48001122",
processInstanceId: "b0a28a43-fa2b-11e8-9c34-acde48001122"
}
]
记下任务ID,然后在 http://localhost8080/complete-task?taskId=b0a60cb6-fa2b-11e8-9c34-acde48001122 调用中使用它来完成任务。这将使流程实例转换到下一个活动,在我们的例子中是一个服务任务。
由于我们尚未实现服务任务,因此我们将在日志和浏览器中看到以下异常:
org.activiti.engine.ActivitiException:没有名为'serviceTask1Impl'的bean可用
所以让我们修复服务任务实现。
评论已关闭