【问题标题】:Camunda : Set Assignee to all UserTasks of the process instanceCamunda:将Assignee设置为流程实例的所有UserTasks
【发布时间】:2020-06-29 12:31:05
【问题描述】:

我有一个要求,我需要在创建实例后立即将受理人设置为流程实例中的所有“用户任务”,这基于设置为用户任务的候选组。

我尝试使用这个来获取用户任务:

Collection<UserTask> userTasks = execution.getBpmnModelInstance().getModelElementsByType(UserTask.class);

这在某种程度上是正确的,但我无法设置受让人的,而且,看起来这将适用于流程本身而不是流程实例。

其次,我尝试从 taskQuery 获取它,它只给我下一个任务,而不是进程中的所有用户任务。

请帮忙!!

【问题讨论】:

    标签: bpmn camunda camunda-modeler


    【解决方案1】:

    这种方式是行不通的。流程可以简化为“令牌在 bpmn 图中移动”……只有令牌的当前位置是相关的。所以很自然,任务列表只会给你当前的任务。不是之后会发生什么......你不知道,因为如果你有一个根据任务结果以不同方式继续的网关?所以放弃使用 BPMN 元模型。专注于运行时。

    您有两种选择来动态分配用户任务:

    1.) 在建模器中,不要将任务硬分配给“a-user”,而是使用${taskAssignment.assignTask(task)} 之类的表达式,其中“taskAssignment”是一个提供返回用户的 String 方法的 bean。 2.) 在“创建”任务中添加一个 taskListener 并在监听器中设置受理人。

    对于选项 2,您可以使用 camunda spring boot events(或(过时的)camunda-bpm-reactor 扩展)来注册一个中心组件,而不是为每个任务添加一个侦听器。

    【讨论】:

    • 嗨@Jan我同意你的回答,但是使用这个我只能将用户分配给用户任务,因为它达到了特定的用户任务,但我需要尽快将用户分配给所有用户任务在创建流程实例时,有没有办法做到这一点。
    • 您只能在创建用户任务实例后修改该实例的属性。流程引擎无法提前知道哪个任务将作为特定流程实例的一部分到达和实例化。创建流程实例时,任务实例不存在。如果从创建流程实例的那一刻起,您需要在用户的任务列表中包含任务列表,那么您需要在开始后立即更改流程模型以并行创建这些任务。如果所有任务实例都是立即创建的,那么您还可以设置它们的受理人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多