2016-08-09 15 views
0

Ich habe einen Workflow, wo ich einige benutzerdefinierte Informationen in Benutzeraufgaben starren muss. So habe ich extensionElement wie folgt:activiti extensionElemente von Benutzeraufgaben lesen/schreiben api's

  <userTask id="writeReportTask" name="Write monthly financial report" activiti:assignee="${assignee}" activiti:owner="${owner}"> 
      <extensionElements> 
       <activiti:field name="clientName" stringValue="${clientName}" /> 
       <activiti:field name="companyName" stringValue="${companyName}" /> 
      </extensionElements> 
      </userTask> 

     <userTask id="financeReportTask" name="review monthly financial report" activiti:assignee="${assignee}" activiti:owner="${owner}"> 
      <extensionElements> 
       <activiti:field name="clientName" stringValue="${clientName}" /> 
       <activiti:field name="companyName" stringValue="${companyName}" /> 
      </extensionElements> 
      </userTask> 

In über Workflow Ich werde zwei benutzerdefinierte speichern Eigenschaften „client“ und „dueDate“.
1. Wie lese/schreibe "clientName" und "companyName" Wert über API für aktuell aktivierte Aufgaben? 2. Im obigen Beispiel speichere ich einen String-Wert (stringValue = "$ {clientName}"). Gibt es eine Möglichkeit, eine Werteliste zu speichern und eine Werteliste über die API zu speichern/abzurufen?

Bitte helfen

Antwort

1

1:

$ {} client und $ {Companyname} sind Prozessvariablen. Sie können/Schreib aus aktuellen Ausführungs lesen:

lesen:

Task task = taskService.createTaskQuery().processInstanceId(String.valueOf(processInstanceId)).active().singleResult(); 
Map<String, Object> variablesMap = runtimeService.getVariables(task.getExecutionId()); 
String clientName = variablesMap.get("clientName"); 
String companyName = variablesMap.get("companyName"); 

schreiben:

Task task = taskService.createTaskQuery().processInstanceId(String.valueOf(processInstanceId)).active().singleResult(); 
runtimeService.setVariable(task.getExecutionId(), "clientName", clientName); 
runtimeService.setVariable(task.getExecutionId(), "companyName", companyName); 

Oder Sie können Ihre eigenen Datenbankvariablen speichern und/Schreib von ihm gelesen .

<userTask id="writeReportTask" name="Write monthly financial report" activiti:assignee="${assignee}" activiti:owner="${owner}"> 
    <extensionElements> 
     <activiti:taskListener event="create" delegateExpression="${myTaskListenerBean}"> 
      <activiti:field name="clientName" stringValue="${clientName}" /> 
      <activiti:field name="companyName" stringValue="${companyName}" /> 
     </activiti:taskListener> 
    </extensionElements> 
</userTask> 

public class MyTaskCreateListener implements TaskListener { 

    private String clientName; 
    private String companyName; 

    @Autowired 
    private AdditionalTaskDataDao additionalTaskDataDao; 

    public void notify(DelegateTask delegateTask) { 
     AdditionalTaskData taskData = new AdditionalTaskData(); 
     taskData.setClientName(clientName); 
     taskData.setCompanyName(companyName); 
     taskData.setTaskId(delegateTask.getId()); 

     myDataDao.save(taskData); 
    } 
} 

2:

lesen:

Task task = taskService.createTaskQuery().processInstanceId(String.valueOf(processInstanceId)).active().singleResult(); 
Map<String, Object> variablesMap = runtimeService.getVariables(task.getExecutionId()); 

schreiben:

Task task = taskService.createTaskQuery().processInstanceId(String.valueOf(processInstanceId)).active().singleResult(); 
runtimeService.setVariables(task.getExecutionId(), variablesMap); 
+0

Vielen Dank. Du hast mein größtes Problem gelöst :) – Krishna

+0

Ich habe noch einen Zweifel. Gibt es eine Möglichkeit, Teilaufgaben für eine Aufgabe dynamisch zu erstellen? – Krishna