activiti extensionElements of user tasks read/write api's
activiti extensionElements of user tasks read/write api's
我有一个工作流程,我需要在其中查看用户任务中的一些自定义信息。所以我使用了 extensionElement 如下:
<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>
在上面的工作流程中,我将存储两个自定义属性 "clientName" 和 "dueDate"。
1.如何通过API为当前激活的任务read/write "clientName"和"companyName"取值?
2. 在上面的示例中,我存储了字符串值 (stringValue="${clientName}")。有没有一种方法可以存储值列表以及如何通过 API 来 store/retrieve 值列表?
请帮忙
1:
${clientName} 和 ${companyName} 是过程变量。您可以 read/write 从当前执行:
阅读:
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);
或者您可以将变量存储到您自己的数据库中,然后从中 read/write。
<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);
我有一个工作流程,我需要在其中查看用户任务中的一些自定义信息。所以我使用了 extensionElement 如下:
<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>
在上面的工作流程中,我将存储两个自定义属性 "clientName" 和 "dueDate"。
1.如何通过API为当前激活的任务read/write "clientName"和"companyName"取值?
2. 在上面的示例中,我存储了字符串值 (stringValue="${clientName}")。有没有一种方法可以存储值列表以及如何通过 API 来 store/retrieve 值列表?
请帮忙
1:
${clientName} 和 ${companyName} 是过程变量。您可以 read/write 从当前执行:
阅读:
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);
或者您可以将变量存储到您自己的数据库中,然后从中 read/write。
<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);