activiti extensionЭлементы пользовательских задач чтение/запись API

У меня есть один рабочий процесс, в котором мне нужно просмотреть некоторую пользовательскую информацию внутри пользовательских задач. Поэтому я использовал 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. Как читать/записывать значения «clientName» и «companyName» через API для текущих активированных задач? 2. В приведенном выше примере я сохраняю строковое значение (stringValue="${clientName}"). Есть ли способ сохранить список значений и как сохранить/получить список значений через API?

Пожалуйста помоги


person Krishna    schedule 09.08.2016    source источник


Ответы (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);
person fersmi    schedule 10.08.2016
comment
У меня есть еще одно сомнение. Есть ли способ создать подзадачу для задачи динамически? - person Krishna; 10.08.2016