6

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

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

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

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

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

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

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

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

任何想法如何解决这个问题?

任何提示都非常受欢迎。干杯克里斯

4

3 回答 3

3

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

在此处输入图像描述

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

如果用户在计时器运行期间将“ extendDeadline ”的值更改为,true则进程再次返回到用户任务,其中边界计时器设置为“ hurry ”的值。

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

于 2015-05-12T10:20:45.710 回答
2

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

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

信号处理

于 2015-05-12T07:36:09.190 回答
0

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

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

于 2017-08-11T06:54:02.880 回答