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 添加的图表所示。另见下图。
然后您可以在第二个序列流上使用一些独占网关,并使用新的计时器值将其重新路由回同一任务。
我在 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 添加的图表所示。另见下图。
然后您可以在第二个序列流上使用一些独占网关,并使用新的计时器值将其重新路由回同一任务。