2016-06-09 9 views
0

Ich versuche, Aufgabe in Activiti nach Activiti folgenden Szenario zuzuordnen: Benutzer schließt seine eigene Aufgabe und Aufgabe müssen weiter zur Kandidatengruppe.Activiti Kandidat Gruppenzuordnung Implementierung

In Activiti-Eigenschaften hat diese Aufgabe keine Bearbeiter/Kandidatengruppen. Ich füge in Java-Code zu dieser Aufgabe Kandidatengruppe:

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()); 
} 

ich die folgende Ausnahme erhalten, wenn getTaskForCandidateGroup():

"org.springframework.http.converter.HttpMessageNotWritableException" zu nennen,

"Nachricht": "Inhalt konnte nicht geschrieben werden: Lazy Laden außerhalb des Befehls Kontext (über die Referenzkette: java.util.ArrayList [0] -> org.activiti.engine.impl.persistence.entity.TaskEntity [\" ​​variableInstances \ "]); geschachtelte Ausnahme ist com.fasterxml.jackson.databind.JsonMappingException: Lazy Laden außerhalb Befehlskontext (durch Referenzkette: java.util.ArrayList [0] -> org.activiti.engine.impl.persistence.entity.TaskEntity [\ "variableInstances \"])“, "Pfad": "/ teuis-api/Workflow-bps06/getTasksDirectorDeputyGroup"

jemand eine andere Lösung vorschlagen kann, um diese Aufgabe zu implementieren?

+0

Wann rufen Sie getTaskForCandidateGroup()? Ihr Anruf ist wahrscheinlich außerhalb der Transaktion. – fersmi

+0

Entschuldigung für die späte Antwort. Ich rufe direkt von der API (RestController). Keine zusätzliche Funktionalität. Ich möchte nur die Aufgaben mit einer hinzugefügten Kandidatengruppe anzeigen. Kein Problem mit Anspruch, der Prozess geht weiter, aber das Problem mit Aufgaben zu bekommen. –

Antwort

2

Das Problem ist gelöst.

Ich habe versucht, die Service-und Return-Liste direkt aufrufen, aber es war Ursache für den Fehler.

@RequestMapping(value = "/getTaskForCandidateGroup") 
public List<Task> getTaskForCandidateGroup() { 
    return getTaskForCandidateGroup(); 
} 

Neue Methode:

@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; 
0

Verwenden Sie einen Listener, der dem assign-Ereignis zugeordnet ist. Assign wird vor dem Erstellen speziell ausgeführt, um dieses Szenario zu behandeln.

Verwandte Themen