Workflow 如何使用工作流组件进行并行审批?

Workflow 如何使用工作流组件进行并行审批?,workflow,symfony,Workflow,Symfony,我一直试图了解Symfony中的新工作流组件,并查看了上的示例。在本例中,有一个记者批准和一个拼写检查批准,这两个都是移动到发布地点所必需的。这如何处理来自记者或拼写检查者的拒绝?例如,如果存在记者拒绝转换和拼写检查拒绝转换,系统如何在只有一次拒绝的情况下以拒绝状态结束?如果不将symfony工作流组件与一些自定义逻辑交织在一起,symfony工作流组件就不会真正以这种方式工作。纯粹使用工作流组件构建该组件将需要以任意顺序进行两次转换,以从状态A(例如,草稿)转换到状态B(已批准)。当然,通过实

我一直试图了解Symfony中的新工作流组件,并查看了上的示例。在本例中,有一个记者批准和一个拼写检查批准,这两个都是移动到发布地点所必需的。这如何处理来自记者或拼写检查者的拒绝?例如,如果存在记者拒绝转换和拼写检查拒绝转换,系统如何在只有一次拒绝的情况下以拒绝状态结束?

如果不将symfony工作流组件与一些自定义逻辑交织在一起,symfony工作流组件就不会真正以这种方式工作。纯粹使用工作流组件构建该组件将需要以任意顺序进行两次转换,以从状态A(例如,草稿)转换到状态B(已批准)。当然,通过实现两个中间状态,您可以通过两个批准来实现这一点:

  • 草稿->拼写检查器批准->完全批准
  • 草稿->记者批准->完全批准
在完全批准之前的任何状态下,可以过渡到拒绝。然而,这样一个系统的复杂性将随着每一次中间过渡而呈指数级增加。三人审批系统已经需要更多:

  • 草稿->A审核->A、B审核->审核
  • 草稿->A审核->A、C审核->审核
  • 草稿->B审核->A、B审核->审核
  • 草稿->B审核->B、C审核->审核
  • 草稿->C审核->A、C审核->审核
  • 草稿->C批准->B和C批准->批准
现在我们已经从2个可能的流变成了6个可能的流。添加第四个审批人将进一步增加可能的流程的数量,而且还需要对现有流程进行重大修改

在我看来,更好的方法是只允许从草稿到批准以及从草稿到拒绝的转换,但只允许在所有必需的批准人都批准了文章后从草稿到批准的转换,例如,将批准操作作为命令,而不是立即触发转换,如果所有审批人都已批准,则在命令处理程序中触发转换(例如,使用现有的验证组件很容易实现)。向拒绝的转换将不会被验证,并将立即执行,因为任何拒绝都足以拒绝一篇文章。或者可能不是-在这个设置中,添加这方面的需求也很容易


这样,您可以添加任意多个并行审批,而不会增加应用程序的复杂性,更重要的是,您可以添加审批人,而无需修改您的工作流。

我认为您需要的是条件路由,因为它是Petri网中的一种路由,Petri网是工作流组件的基础。Aproval将是一个yes/no选择,来自两个Aproval的“no”分支的流将进入拒绝位置。问题是,我也不知道如何在工作流组件中实现它。见: