Activiti7集成SpringBoot2官方实例(六):添加ReST调用完成用户任务

@高效码农  June 25, 2019

我们现在处于一个阶段,我们应该能够实现一个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可用

所以让我们修复服务任务实现。



添加新评论