Activiti候选人组分配实施

时间:2016-06-09 08:11:40

标签: java activiti

我尝试在下一个场景之后将任务分配给Activiti中的候选组: 用户关闭自己的任务,任务必须前进到候选组。

在Activiti属性中,此任务没有受理人/候选人组。我在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():

时出现以下异常
  

&#34; org.springframework.http.converter.HttpMessageNotWritableException&#34;,

     

&#34; message&#34;:&#34;无法写内容:延迟加载命令外   上下文(通过参考链:   的java.util.ArrayList [0] - &GT; org.activiti.engine.impl.persistence.entity.TaskEntity [\&#34; variableInstances \&#34;]);   嵌套异常是   com.fasterxml.jackson.databind.JsonMappingException:延迟加载   外部命令上下文(通过参考链:   的java.util.ArrayList [0] - &GT; org.activiti.engine.impl.persistence.entity.TaskEntity [\&#34; variableInstances \&#34;])&#34 ;,   &#34;路径&#34;:&#34; / teuis-api / workflow-bps06 / getTasksDirectorDeputyGroup&#34;

有人可以提出另一种解决方案来实施此任务吗?

2 个答案:

答案 0 :(得分:2)

问题解决了。

我试图直接调用该服务并返回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;

答案 1 :(得分:0)

使用与assign事件关联的侦听器。 在专门创建处理此方案之前执行分配。