2016-08-09 14 views
0

我有一個工作流,我需要在用戶任務中注視一些自定義信息。所以我用extensionElement如下:用戶任務的活動擴展元素讀/寫api的

  <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> 

在上面的工作流程我要存儲兩個自定義屬性「客戶端名」和「的dueDate」。
1.如何通過API爲當前激活的任務讀取/寫入「clientName」和「companyName」值? 2.在上面的例子中,我存儲字符串值(stringValue =「$ {clientName}」)。有沒有方法可以存儲值列表以及如何通過API存儲/檢索值列表?

請幫

回答

1

1:

$ {} CLIENTNAME和 $ {CompanyName}的是過程變量。您可以從當前執行的讀/寫:

閱讀:

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"); 

寫:

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

或者您可以變量存儲到自己的數據庫,並從中讀取/寫入。

<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:

閱讀:

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

寫:

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

非常感謝。你解決了我最大的問題:) – Krishna

+0

我還有一個疑問。有沒有辦法動態創建任務的子任務? – Krishna