工作流回退及抄送
各位前辈有没有开发过工作流的回退和抄送的?
谢谢楼上的讲解,不过对于回退来说,分为很多种模式,按照你说的如果来实现没有分支的流程可以的,但是如果涉及分支或者是子流程应该怎么解决?(最主要的是回退以后这个接受回退的节点的处理应该按照怎么的逻辑:比如按照原来的路径走流程或者是直接发给触发回退的节点还是顺序的回退给本身的父节点?)
还有抄送,如果设计成'抄送节点',那么该抄送节点和其他节点的父子关系如何来描述?
有没有成功的案例,能不能麻烦发我邮箱:xujun19841008@163.com,万分感谢。这两个功能属于有中国特色的流程模式,国外成熟的流程引擎没有这方面的实例讲解。
[quote=徐军]
谢谢楼上的讲解,不过对于回退来说,分为很多种模式,按照你说的如果来实现没有分支的流程可以的,但是如果涉及分支或者是子流程应该怎么解决?(最主要的是回退以后这个接受回退的节点的处理应该按照怎么的逻辑:比如按照原来的路径走流程或者是直接发给触发回退的节点还是顺序的回退给本身的父节点?)
还有抄送,如果设计成'抄送节点',那么该抄送节点和其他节点的父子关系如何来描述?
有没有成功的案例,能不能麻烦发我邮箱:xujun19841008@163.com,万分感谢。这两个功能属于有中国特色的流程模式,国外成熟的流程引擎没有这方面的实例讲解。
[/quote]
嗯,提的非常好。对于分支和子流程的情况,回退处理起来是很麻烦的。
首先讲分支:M选N(N>=1),这时,又分为自动决策和人工决策,那么对于自动决策来讲还是比较好处理的,因为系统可以自动记录当时的决策条件,而对于人工决策来讲,因为没有什么决策值,因此需要记录下原来走过的路径(当然这里面还有一个情况,就是说,在回退之后,重新执行时,需要改变流程的执行路径,这种反而不用处理什么了);
其次是子流程:其实对于子流程来讲,在实际的业务场景中一般是不允许回退的,尤其是多部门并联审批,如果真的需要回退,实际上已经是废除当前流程实例了,也就是说需要重新走一个新的流程实例。如果非要回退的话,那么同样要仔细的分析业务需求,然后进行技术实现。
综合来讲,其实回退本身并不是很复杂,复杂的是业务,例如在回退的过程中,有没有业务的回退(或者说业务逻辑补偿?如果需要你就必须在流程的每个环节进行业务快照的备份,在回退时调用这个快照进行补偿)也就是说,你一定要彻底搞清楚用户到底是想要什么,然后再根据需求进行技术实现。
[quote=徐军]
比如按照原来的路径走流程或者是直接发给触发回退的节点还是顺序的回退给本身的父节点?
[/quote]
这个是看业务本身的需要了,例如,如果从第7个节点回退到第3个节点,那么在第3个节点重新办理之后,到底是给第7个节点,还是给第4个节点,这个肯定是按照业务的需求来做,如果回退本身需要4、5、6三个环节都重新办理,当然就是给第4个节点了,如果只需要第3个节点重新办理,那么他办理之后就重新回到第7个节点(同样的创建一个动态转移就可以实现)。
学习!
按照工作流的思想来讲不应该出现“回退”或“撤销”这种操作,流程本身就是状态变迁的过程,工作流已经包含了你所谓的“回退”的实现。
抄送或发送邮件短信等建议通过在处理环节操作接口中预留,至于发送权限、格式、内容等建议结合实际情况设计或对接外部系统,以减少不必要开发量。
[quote=xinnn]
按照工作流的思想来讲不应该出现“回退”或“撤销”这种操作,流程本身就是状态变迁的过程,工作流已经包含了你所谓的“回退”的实现。
抄送或发送邮件短信等建议通过在处理环节操作接口中预留,至于发送权限、格式、内容等建议结合实际情况设计或对接外部系统,以减少不必要开发量。
[/quote]
你这个观点是从纯技术理论的角度来考虑问题,上面讲到了,“回退”和“撤销”,最复杂的是业务,而对于分支和子流程的工作流实例数据来讲,同样是很复杂的,流程本身虽然是状态变迁,但是在上面两个需求中,是不可能仅仅进行一下状态的变迁就可以解决的,因为按照FSM的设计,它只负责数据本身的一些状态变迁,而这些工作流数据之间(按照wfmc来讲有三类数据:工作流控制数据、工作流应用数据、工作流相关数据)的逻辑关系,必须要自己去做处理的。
您对我的意思有误解,我指的状态变迁是流程驱动的,并非只是简单的改变状态,相对于复杂的子流程和分支同样适用。你提出的问题我是明白的,把所有的问题归到流程上才是解决问题的根本,否则要解决的问题会越来越多,越来越复杂,这样的工作流没有人用得起。
[quote=xinnn]
你提出的问题我是明白的,把所有的问题归到流程上才是解决问题的根本,否则要解决的问题会越来越多,越来越复杂,这样的工作流没有人用得起。
[/quote]
既然我们国家有回退的需求,比如JBPM中的节点,jbpmside项目就应该提供这样的实现。不知道
这个项目中是否有这样的功能。或者jbpmside专家组抽象出需求,让我们这些流程爱好者也来想想这个问题。


[quote=徐军]
各位前辈有没有开发过工作流的回退和抄送的?
[/quote]
这个是国内工作流项目中,最基本的功能。对于回退来讲,最常用的实现方式,是在当前节点与回退目的地节点之间动态的创建一个transition,在回退动作时出发这个transition,然后重新创建一个针对于目的地节点的workitem。
对于抄送,实际上有很多种实现方式了,严格来讲,抄送不能算作流程路径中的环节,它是某个环节上的一个并发操作(当然也是可以用一个流程节点,例如就叫做“抄送节点”来实现的,即与某个工作流节点一起并发),可以通过在引擎内部内置应用的方式来实现。当然如果用“抄送节点”来实现,则更灵活一些,可以任意动态设置一些属性参数,例如抄送对象。