jbpm4实现会签功能(转)

来源:互联网 发布:js获取单选框选中的值 编辑:程序博客网 时间:2024/05/13 15:54

会签可以分为单步会签(只有一个审批环节),及多步会签(每一个子审批流有多个审批环节)。

对于单步会签,可以直接用TaskService来进行动态任务实例的创建,其中的 newTask()方法即可用来动态创建多个任务实例,然后再调用addTaskParticipatingUser()或 addTaskParticipatingGroup()方法实现动态增加任务办理人,此时即实现了单步会签功能。

而对于多步会签,则需要调用子流程实现,通常的应用场景及方案有两个:

一、通过启动一个子流程定义(此子流程就是多个会签部门内部的审批流,而且各个部门的审批环节完全相同,只是每个审批环节的办理人不同而已,因此可以公用一个子流程定义)的多个子流程实例来实现多步会签。这时,即便是对于会签的部门数是未知的,需要动态决定,也可以轻松实现,只需要在运行期根据会签部门数动态地创建同等数量的子流程实例就可以了。

二、动态地启动多个不同子流程定义的实例,此时即会签的各个部门之间对当前需要会签的业务的审批环节是完全不一样的,即每个部门内部都已经有一个对当前需要会签业务的审批流了。这时就需要动态地启动这些会签部门的自己的子审批流程。实际上在真实的场景中,一般都是由父流程执行到某个会签节点时,通过jms消息向各个会签部门(注意这个会签部门一般都是分布的,例如公安局、工商局、税务局等)发送业务数据,而父流程在此等待会签结果,而各个会签部门都有自己的监听器,在监听到会签请求时,在内部发起自己的审批流,内部审批完毕再发送业务数据给父流程,父流程接收到审批结果的业务数据后,流程继续向下执行。对于这个场景及方案,实际上,由于各个部门(公安局、工商局、税务局)都是分布的,采用的工作流产品也是不同的,即便是同一个公司的产品,也是分布式部署的,因此在这个场景中,是不存在什么subprocess或subProcessActivity这个概念的。而是两个同等级的流程之间的通信而已。

对于多步会签的第一个场景及方案:由于在jbpm4中,流程的推进是依赖于ExecutionImpl来执行的,而对于每一个流程实例ProcessInstance持有的ExecutionImpl实例也只有一个与之关联的subProcessInstance,因此对于一个子流程节点SubProcessActivity来说也就只能有一个子流程实例与之关联了,此时要想通过启动一个子流程定义的多个子流程实例来实现多步会签,从技术上就行不通了,除非去修改jBPM4的相关代码。

对于多步会签的第二个场景及方案:在jbpm4中实现起来就很简单了,因为jbpm4提供了jms的消息机制,而集成ActiveMQ也很简单。

原创粉丝点击