随着流程的运行,我们应该能够列出可用任务,然后查看作为流程定义中第一个活动的用户任务。
在 org/activiti/training/activiti7apibasicprocessusertaskservicetaskevents/rest
包中添加一个名为 TaskManagementController
的新Spring MVC控制器,如下所示:
package org.activiti.training.activiti7apibasicprocessusertaskservicetaskevents.rest;
import org.activiti.api.runtime.shared.query.Page;
import org.activiti.api.runtime.shared.query.Pageable;
import org.activiti.api.task.model.Task;
import org.activiti.api.task.model.builders.TaskPayloadBuilder;
import org.activiti.api.task.runtime.TaskAdminRuntime;
import org.activiti.api.task.runtime.TaskRuntime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class TaskManagementController {
private Logger logger = LoggerFactory.getLogger(TaskManagementController.class);
@Autowired
private TaskRuntime taskRuntime;
@GetMapping("/my-tasks")
public List<Task> getMyTasks() {
Page<Task> tasks = taskRuntime.tasks(Pageable.of(0, 10));
logger.info("> My Available Tasks: " + tasks.getTotalItems());
for (Task task : tasks.getContent()) {
logger.info("\t> My User Task: " + task);
}
return tasks.getContent();
}
}
首先注入 TaskRuntime Spring bean,以便我们可以使用Task Runtime API。此API将与当前用户相关的任务一起使用。因此,当我们调用 tasks()方法时,它将返回分配给当前登录用户的任务。API具有以下方法:
public interface TaskRuntime {
TaskRuntimeConfiguration configuration();
Task task(String var1);
Page<Task> tasks(Pageable var1);
Page<Task> tasks(Pageable var1, GetTasksPayload var2);
Task create(CreateTaskPayload var1);
Task claim(ClaimTaskPayload var1);
Task release(ReleaseTaskPayload var1);
Task complete(CompleteTaskPayload var1);
Task update(UpdateTaskPayload var1);
Task delete(DeleteTaskPayload var1);
List<VariableInstance> variables(GetTaskVariablesPayload var1);
void setVariables(SetTaskVariablesPayload var1);
}
在这种情况下,我们只需要 tasks()
方法。在 /my-tasks
URL路径用于该休息GET调用。
当我们想要查看在所有活动流程实例中分配的所有任务时,我们还可以添加ReST调用。可用于支持和管理目的,例如当您想要代表某人重新分配任务或完成任务时。此调用将需要管理员凭据(即我们需要以具有 ROLE_ACTIVITI_ADMIN 的用户身份登录)。我们还需要使用名为 TaskAdminRuntime 的不同运行时API 。这是方法:
...
@Autowired
private TaskAdminRuntime taskAdminRuntime;
...
@GetMapping("/all-tasks")
public List<Task> getAllTasks() {
Page<Task> tasks = taskAdminRuntime.tasks(Pageable.of(0, 10));
logger.info("> All Available Tasks: " + tasks.getTotalItems());
for (Task task : tasks.getContent()) {
logger.info("\t> User Task: " + task);
}
return tasks.getContent();
}
现在,按照前面的描述打包并运行应用程序。启动应用程序时,您应该看到指示所有内容都已正确实现的日志:
...
2018-08-30 09:09:47.757 INFO 36063 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/my-tasks],methods=[GET]}" onto public java.util.List<org.activiti.runtime.api.model.Task> org.activiti.training.activiti7apibasicprocessusertaskservicetaskevents.rest.TaskManagementController.getMyTasks()
2018-08-30 09:09:47.757 INFO 36063 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/all-tasks],methods=[GET]}" onto public java.util.List<org.activiti.runtime.api.model.Task> org.activiti.training.activiti7apibasicprocessusertaskservicetaskevents.rest.TaskManagementController.getAllTasks()
...
当我们运行内存数据库时,我们之前启动的流程实例将在重新启动后消失,创建一个新的 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"
}
]
在日志中,您应该看到以下内容:
2018-08-30 09:50:09.753 INFO 36063 --- [nio-8080-exec-9] o.a.t.a.rest.TaskManagementController : > My Available Tasks: 1
2018-08-30 09:50:09.754 INFO 36063 --- [nio-8080-exec-9] o.a.t.a.rest.TaskManagementController : > My User Task: TaskImpl{id='b0a60cb6-fa2b-11e8-9c34-acde48001122', owner='null', assignee='testuser', name='User Task 1', description='null', createdDate=Fri Dec 07 14:23:38 GMT 2018, claimedDate=null, dueDate=null, priority=50, processDefinitionId='c68315b2-fa2a-11e8-9c34-acde48001122', processInstanceId='b0a28a43-fa2b-11e8-9c34-acde48001122', parentTaskId='null', formKey='null', status=ASSIGNED}
现在,通过清除浏览器缓存注销,然后点击 http://localhost:8080/all-tasks。当要求登录时使用 admin/1234 凭据。作为响应,您应该看到相同的用户任务。
评论已关闭