首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改activiti中多实例的集合

如何修改activiti中多实例的集合
EN

Stack Overflow用户
提问于 2019-02-11 10:45:31
回答 2查看 848关注 0票数 2

我们正在创建一个项目的POC,我们将有4个阶段的批准。假设这四个阶段是

  1. 会计员
  2. 经理
  3. 所有者
  4. 输送头

一个过程已经开始,现在用户的任务,即批准是在会计级别。多实例将在从Java类返回的集合中循环。当循环为特定的一组用户运行时,我想在其中推送一个新用户。我可以增加更多的用户在集合的经理,业主和交付负责人,因为批准阶段是在会计水平,并要求那些审批者还没有执行。

我的过程XML:

代码语言:javascript
复制
<startEvent id="startEvent1"></startEvent>
    <userTask id="accountantApproval" name="Accountant Approval" activiti:assignee="${accountant}">
      <extensionElements>
        <activiti:formProperty id="accountantApprovalValue" name="Accountant Approval Value" type="enum" required="true"></activiti:formProperty>
        <modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
      </extensionElements>
      <multiInstanceLoopCharacteristics isSequential="true" activiti:collection="${myService.fetchEmployeesByRole('Accountant')}" activiti:elementVariable="accountant">
        <completionCondition>${status != 'Submit'}</completionCondition>
      </multiInstanceLoopCharacteristics>
    </userTask>
    <userTask id="managerApproval" name="Manager Approval" activiti:assignee="${manager}">
      <extensionElements>
        <modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
      </extensionElements>
      <multiInstanceLoopCharacteristics isSequential="true" activiti:collection="${myService.fetchEmployeesByRole('Manager')}" activiti:elementVariable="manager">
        <completionCondition>${status != 'Submit'}</completionCondition>
      </multiInstanceLoopCharacteristics>
    </userTask>
    <exclusiveGateway id="accountantEXOR" name="Accountant EXOR"></exclusiveGateway>
    <serviceTask id="accountantRejectService" name="Accountant Reject Service" activiti:class="com.example.demo.RejectService"></serviceTask>
    <exclusiveGateway id="managerEXOR" name="Manager EXOR"></exclusiveGateway>
    <serviceTask id="managerRejectService" name="Manager Reject Service" activiti:class="com.example.demo.RejectService"></serviceTask>
    <endEvent id="endProcess" name="End Process">
      <terminateEventDefinition></terminateEventDefinition>
    </endEvent>
    <userTask id="OwnerApproval" name="Owner Approval" activiti:assignee="${accountant}">
      <extensionElements>
        <activiti:formProperty id="sid-52D1F400-4813-4B2F-856D-61FE4C41C6FEValue" name="Accountant Approval Value" type="enum" required="true"></activiti:formProperty>
        <modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
      </extensionElements>
      <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${myService.fetchEmployeesByRole('Owner')}" activiti:elementVariable="owner">
        <completionCondition>${status == 'Submit'}</completionCondition>
      </multiInstanceLoopCharacteristics>
    </userTask>

现在,假设一个过程已经开始,并且是在会计级别。多实例将从服务类中获取员工并将其推送到集合中,然后开始遍历它。比方说,它吸引了2名雇员大卫和山姆。大卫批准了这项任务,然后再进行下一次批准,即山姆。山姆想在循环中再加一个会计。

是否有一种方法可以在当前运行的循环集合中添加新用户,即会计集合?如果是,请建议一种方法,最好使用Java。

如果我们不能在集合中添加一个用户,我们是否可以创建一个新的用户任务并将其分配给正在进行的进程?因此,一旦会计循环完成,在进入下一个审批阶段之前,它应该完成新创建的用户任务。

EN

回答 2

Stack Overflow用户

发布于 2019-02-12 09:40:32

你需要详细阐述你的问题,以便我们能帮助你。您能提供一个流程图、图像或其他东西来说明您的流程是什么样子的吗?如果您想要添加更多的用户,您可以为您所在的每一组人使用组。因此,与其让会计作为用户,您可以使用一个组并动态地向该组添加更多的人。

当您使用多个实例节点时,所有实例都是在执行到达BPMN元素时创建的,此时将使用集合的内容,一旦创建了它们,您就无法更改它。您可以做的是循环回BPMN元素并再次创建实例,但这将促使您确保清理之前的任务。

如果你提供更多的细节,我们可能会帮助你一个更详细的答案。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2019-02-25 07:17:13

您可以在多实例使用任务/子进程上使用边界信号事件,这将取消所有当前正在运行的任务,并为更新的集合创建新任务。

下图可能会有所帮助

注意事项:在使用runtimeService.signalEventReceived("yourSignalId", "yourProcessInstanceID");更新集合后,必须调用(代码中的)信号

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54628788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档