一个例子:许可证必须由两名律师和一名工程师审查。如果这三个中的任何一个拒绝它,则该过程进入“被拒绝”的结束状态。如果所有三个都授予许可,则它进入“授权”结束状态。所有三名审查员可以同时或以任何顺序进行审查。
一旦工程师授予它,就不应该由工程师进行检查;一旦两位律师对其进行了审查,律师就不应该这样做;一旦一名工程师和两名律师检查过,它应该进入授予最终状态。
我最初的想法是,要么我有一个过于复杂的状态转换图,“相同的”中间状态多次重复,或我携带(外部)状态与进程{bool被拒绝; int engineerSignoffId; int lawyer1SignoffId; int lawyer2SignoffId}。
或类似的东西?如果是这样,工程师的拒绝如何终止“律师”中的子流程?
START->FORK->Engineer->Granted?---------------->Y->JOIN-->Granted
|->Lawyers-->Granted?->by 2 lawyers?->Y---^
^ |
|--------------------------N
规范jBPM的答案是什么?你能指点我这些答案的例子或文件吗?
感谢。
答案 0 :(得分:0)
好吧,我不确定我是否正确使用你的用例,但让我试试。
被拒绝的最终状态很容易 - 你可以拥有其中许多或一个,这没关系。如果进程达到结束状态,则该进程结束。被拒绝。故事结局: 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版本,但如果您使用JBPM 5,这当然也可以在BPMN 2.0中使用。