2015-05-11 27 views
2

я получил специальный вопрос о граничном таймере событий на пользователь задаче в Activiti/Camunda:Activiti/Camunda изменения пограничного таймер с переменной

При запуске процесса я установить длительность таймера с переменным процессом и использовать выражение в определение границы для разрешения переменной. Граничное событие определено в пользовательской задаче.

<bpmn2:timerEventDefinition id="_TimerEventDefinition_11"> 
 
     <bpmn2:timeDuration xsi:type="bpmn2:tFormalExpression">${hurry}</bpmn2:timeDuration> 
 
     </bpmn2:timerEventDefinition>

В некоторых случаях, когда таймер уже запущен это может произойти, что крайний срок (DueDate) должен быть расширен, поскольку asignee запросила больше времени. Для этого я хочу изменить значение переменной процесса, определяющей крайний срок.

Как это бывает, переменная уже разрешена при запуске процесса и устанавливается на граничное событие.

Любые дальнейшие изменения переменной не влияют на dueDate граничного таймера, поскольку она хранится в базе данных и не обновляется при изменении значения переменной.

Я знаю, как обновить dueDate элемента job через Java API, но я хочу предоставить общий подход, например, установить его с изменением значения переменной.

Наиболее распространенным вариантом использования для продления срока будет время, когда граничный таймер уже запущен.

Любые идеи, как справиться с этой проблемой?

Любые советы очень удобны. Cheers Chris

ответ

2

Через некоторое время думая, что я придумал обходной путь, как что:

enter image description here

Я начинаю процесс с двумя переменными. «hurry» оценивается для граничного таймера. И «extendDeadline» инициализируется false. Если таймер запускается и процесс переходит к эксклюзивному шлюзу, оценивается значение «extendDeadline».

Если пользователь изменил значение «extendDeadline» в true во время таймера был запущен процесс возвращается к задаче пользователя снова, где граница таймера устанавливается значение «спешит».

Если «extendDeadline» по-прежнему установлен в false, процесс может продолжаться.

1

Если таймер работает, вы можете изменить соответствующую дату таймера, выполнив сигнал . Если assginee запросило больше времени, установите новое значение hurry и выполните сигнал. Старый таймер будет отменен, и новый таймер будет создан с новой установленной датой.

runtimeService.setVariable(execution.getId(), "hurry", newDueDate); 
runtimeService.signalEventReceived(signalName, execution.getId()); 

Process with signal

+1

Благодарим вас за ваше предложение. Я думаю, что «managementService.setJobDuedate (jobId, newDueDate)» тоже поможет. Но я хочу добиться того, что dueDate задания обновляется напрямую, изменяя значение переменной, без специального кода. Например, в кабине Camunda Cockpit пользователь может редактировать значение переменных. Этого должно быть достаточно, чтобы расширить dueDate. (По крайней мере, в моем воображении;) – theFriedC

+0

Модификация даты работы была моей первой идеей. –

+0

В Камунде есть билет на Jira, представляющий переменные слушатели. Это именно то, что я ищу. Надеюсь, они скоро это осуществят ... https://app.camunda.com/jira/browse/CAM-2899 – theFriedC

0

Решение состоит в том, чтобы иметь 2 выходных последовательности потока, один должен быть от граничного таймера на задаче, а другой должен быть от задачи сам, как показано на диаграмме, добавленной @theFriedC. См. Также следующий рисунок. enter image description here

Затем вы можете использовать некоторые эксклюзивные шлюзы для потока второй последовательности и перенаправить обратно к одной задаче с новым значением таймера.