我在Activiti / Camunda的用户任务中遇到了一个关于计时器边界事件的特殊问题:
启动过程时,我使用过程变量设置定时器持续时间,并使用边界定义中的表达式来解析变量。边界事件在用户任务上定义。
<bpmn2:timerEventDefinition id="_TimerEventDefinition_11">
<bpmn2:timeDuration xsi:type="bpmn2:tFormalExpression">${hurry}</bpmn2:timeDuration>
</bpmn2:timerEventDefinition>
&#13;
在某些情况下,当计时器已经运行时,可能会发生截止日期(dueDate),因为收件人要求更多时间。为此,我想更改定义截止日期的流程变量的值。
实际上,变量已在process-start处解析并设置为边界事件。
变量的任何进一步更改都不会影响边界计时器的dueDate,因为它存储在数据库中,并且在变量值更改时不会更新。
我知道如何通过Java API更新job元素的dueDate,但我想提供一个通用的方法,比如通过改变变量的值来设置它。
延长截止日期的最常见用例是边界计时器已经运行。
有任何想法如何应对这个问题?
任何提示都非常有用。 干杯克里斯
答案 0 :(得分:2)
经过一段时间的思考后,我想出了一个像这样的解决方法:
我用两个变量开始这个过程。 &#34;的快点强>&#34;被评估为边界计时器。并且&#34; extendDeadline &#34;使用false
进行初始化。如果定时器触发并且进程前进到专用网关,则&#34; extendDeadline&#34;被评估。
如果用户更改了&#34; extendDeadline &#34;的值在计时器运行期间到true
进程再次返回用户任务,其中边界计时器设置为&#34; 快点&#34;。
如果&#34; extendDeadline &#34;仍然设置为false
,此过程可以继续。
答案 1 :(得分:1)
如果定时器正在运行,您可以通过执行信号来更改定时器的dueDate。如果受训者要求更多时间,请设置 hurry 的新值并执行该信号。旧计时器将被取消,新计时器将以新的截止日期创建。
runtimeService.setVariable(execution.getId(), "hurry", newDueDate);
runtimeService.signalEventReceived(signalName, execution.getId());
答案 2 :(得分:0)