Activiti候选组分配实现
Activiti candidate group assignment implementation
我正在尝试按照下一个场景将任务分配给 Activiti 中的候选组:
用户关闭自己的任务,任务必须转到候选组。
在 Activiti 属性中,此任务没有 assignees/candidate 个组。我在 java 代码中将候选组添加到此任务:
public void assignTaskToCandidateGroup(Long entityId) {
ProcessInstance processInstance = super.findProcessInstance(entity);
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
if (task != null) {
taskService.complete(task.getId());
}
// Get next task after previos closed and add Candidate group
task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
taskService.addCandidateGroup(task.getId(), "candidateGroup");
}
public List<Task> getTaskForCandidateGroup() {
return taskService.createTaskQuery().taskCandidateGroup("candidateGroup").list();
}
public void claimTaskCandidate(String taskId, User user) {
Task task = super.findTaskById(taskId);
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("candidateGroup").list();
if (!tasks.contains(task))
throw new UnsupportedOperationException(String.format("Task with id [%s] is not intended for [%s]",
task.getId(), "candidateGroup"));
// ... check services and exception handing omitted
taskService.claim(task.getId(), user.getUsername());
}
调用 getTaskForCandidateGroup():
时出现以下异常
"org.springframework.http.converter.HttpMessageNotWritableException",
"message": "Could not write content: lazy loading outside command
context (through reference chain:
java.util.ArrayList[0]->org.activiti.engine.impl.persistence.entity.TaskEntity[\"variableInstances\"]);
nested exception is
com.fasterxml.jackson.databind.JsonMappingException: lazy loading
outside command context (through reference chain:
java.util.ArrayList[0]->org.activiti.engine.impl.persistence.entity.TaskEntity[\"variableInstances\"])",
"path": "/teuis-api/workflow-bps06/getTasksDirectorDeputyGroup"
有人可以建议另一种解决方案来执行此任务吗?
使用与分配事件关联的侦听器。
assign在create之前执行,专门用来处理这种情况。
问题已解决。
我试过直接调用服务和 return List,但这是错误的原因。
@RequestMapping(value = "/getTaskForCandidateGroup")
public List<Task> getTaskForCandidateGroup() {
return getTaskForCandidateGroup();
}
新方法:
@RequestMapping(value = "/getTaskForCandidateGroup")
public List<Map<String, Object>> getTaskForCandidateGroup() {
List<Tasks> taskList = getTaskForCandidateGroup();
List<Map<String, Object>> customTaskList = new ArrayList<>();
for (Task task : taskList) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("taskId", task.getId());
map.put("taskDefinitionKey", task.getTaskDefinitionKey());
map.put("taskName", task.getName());
customTaskList.add(map);
}
return customTaskList;
我正在尝试按照下一个场景将任务分配给 Activiti 中的候选组: 用户关闭自己的任务,任务必须转到候选组。
在 Activiti 属性中,此任务没有 assignees/candidate 个组。我在 java 代码中将候选组添加到此任务:
public void assignTaskToCandidateGroup(Long entityId) {
ProcessInstance processInstance = super.findProcessInstance(entity);
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
if (task != null) {
taskService.complete(task.getId());
}
// Get next task after previos closed and add Candidate group
task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
taskService.addCandidateGroup(task.getId(), "candidateGroup");
}
public List<Task> getTaskForCandidateGroup() {
return taskService.createTaskQuery().taskCandidateGroup("candidateGroup").list();
}
public void claimTaskCandidate(String taskId, User user) {
Task task = super.findTaskById(taskId);
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("candidateGroup").list();
if (!tasks.contains(task))
throw new UnsupportedOperationException(String.format("Task with id [%s] is not intended for [%s]",
task.getId(), "candidateGroup"));
// ... check services and exception handing omitted
taskService.claim(task.getId(), user.getUsername());
}
调用 getTaskForCandidateGroup():
"org.springframework.http.converter.HttpMessageNotWritableException",
"message": "Could not write content: lazy loading outside command context (through reference chain: java.util.ArrayList[0]->org.activiti.engine.impl.persistence.entity.TaskEntity[\"variableInstances\"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: lazy loading outside command context (through reference chain: java.util.ArrayList[0]->org.activiti.engine.impl.persistence.entity.TaskEntity[\"variableInstances\"])", "path": "/teuis-api/workflow-bps06/getTasksDirectorDeputyGroup"
有人可以建议另一种解决方案来执行此任务吗?
使用与分配事件关联的侦听器。 assign在create之前执行,专门用来处理这种情况。
问题已解决。
我试过直接调用服务和 return List,但这是错误的原因。
@RequestMapping(value = "/getTaskForCandidateGroup")
public List<Task> getTaskForCandidateGroup() {
return getTaskForCandidateGroup();
}
新方法:
@RequestMapping(value = "/getTaskForCandidateGroup")
public List<Map<String, Object>> getTaskForCandidateGroup() {
List<Tasks> taskList = getTaskForCandidateGroup();
List<Map<String, Object>> customTaskList = new ArrayList<>();
for (Task task : taskList) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("taskId", task.getId());
map.put("taskDefinitionKey", task.getTaskDefinitionKey());
map.put("taskName", task.getName());
customTaskList.add(map);
}
return customTaskList;