代码之家  ›  专栏  ›  技术社区  ›  tpdi

如何在jbpm中表示并发操作,其中任何一个操作都可以结束进程?

  •  2
  • tpdi  · 技术社区  · 14 年前

    例如:许可证必须由两名律师和一名工程师审查。如果这三个进程中的任何一个拒绝它,那么进程将进入“拒绝”的结束状态。如果这三个国家都批准了该许可证,则该许可证进入“已批准”的最终状态。所有三名主考人可同时考试,或按任何顺序考试。

    一旦一个工程师同意,它就不应该被一个工程师审查;一旦两个律师审查了它,它就不应该被律师审查;一旦一个工程师和两个律师审查了它,它就应该进入被批准的最终状态。

    我最初的想法是,要么我有一个过于复杂的状态转换图,中间状态“相同”会重复多次, 我携带进程bool rejected;int engineeriesignoffid;int lawyer1signoffid;int lawyer2signoffid的(外部)状态。

    或者像这样?如果是这样,工程师的拒绝如何终止“律师”中的子流程?

    START->FORK->Engineer->Granted?---------------->Y->JOIN-->Granted
              |->Lawyers-->Granted?->by 2 lawyers?->Y---^
                      ^                          |
                      |--------------------------N 
    

    规范的jbpm对此有什么答案?你能给我指出这些答案的例子或文档吗?

    谢谢。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Mike Minicki    14 年前

    嗯,我不确定我是否正确地得到了你的用例,但让我试试。

    被拒绝的结束状态很容易——你可以有很多或者一个,这并不重要。如果进程达到结束状态,则进程结束。拒绝。故事的结尾: http://docs.jboss.com/jbpm/v4/userguide/html_single/#end

    现在,做三个接受的人工任务。一个分配给工程师候选人小组,另两个分配给律师候选人小组。一旦一个人接受了一项任务(即分配给他自己),其他人就不能接受。 http://docs.jboss.com/jbpm/v4/userguide/html_single/#task

    然后,所有人工任务都应该在最后与等待所有并发路径的节点合并,以便继续。即:以正确的多重性连接: http://docs.jboss.com/jbpm/v4/userguide/html_single/#decision

    我不确定您使用的是哪个jbpm版本,但是在bpmn 2.0中,这当然也是可能的,以防您使用jbpm 5。