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;