Activiti / Camunda 用变量改变边界计时器

Activiti / Camunda change boundary timer with variable

我在 Activiti/Camunda 中收到一个关于用户任务定时器边界事件的特殊问题:

启动流程时,我使用流程变量设置计时器持续时间,并在边界定义中使用表达式来解析变量。边界事件在用户任务上定义。

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

在某些情况下,当计时器已经 运行 时,可能会发生截止日期 (dueDate) 应该延长的情况,因为受让人请求了更多时间。为此,我想更改定义截止日期的流程变量的值。

碰巧,变量已经在流程开始时解析并设置为边界事件。

变量的任何进一步更改都不会影响边界计时器的到期日期,因为它存储在数据库中,并且不会在变量值更改时更新。

我知道如何通过 Java API 更新作业元素的到期日期,但我想提供一种通用方法,例如通过更改变量值来设置它。

延长截止日期的最常见用例是边界计时器已经 运行。

有什么办法可以解决这个问题吗?

非常感谢任何提示。 干杯克里斯

如果计时器是 运行,您可以通过执行 信号 来更改计时器的到期日期。如果 assginee 请求更多时间,请设置 hurry 的新值并执行信号。旧计时器将被取消,新计时器将被创建并具有新的截止日期。

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

经过一段时间的思考,我想到了这样的解决方法:

我从两个变量开始这个过程。 "hurry" 被评估为边界计时器。并且“extendDeadline”被初始化为false。如果计时器触发并且进程前进到独占网关,则计算 "extendDeadline" 的值。

如果用户在计时器 运行 过程 returns 期间将“extendDeadline”的值更改为 true边界计时器设置为“hurry”值的用户任务。

如果“extendDeadline”仍设置为false,进程可以继续。

解决方案是有 2 个输出序列流,一个应该来自任务的边界计时器,另一个应该来自任务本身,如@theFriedC 添加的图表所示。另见下图。

然后您可以在第二个序列流上使用一些独占网关,并使用新的计时器值将其重新路由回同一任务。