1. 什么是会签
a) 在流程业务管理中,任务是通常都是由一个人去处理的,而多个人同时处理一个任务,这种任务我们称之为会签任务。
2. 会签的种类
a) 按数量通过:达到一定数量的通过表决后,会签通过。
b) 按比例通过:达到一定比例的通过表决后,会签通过。
c) 一票否决:只要有一个表决时否定的,会签通过。
d) 一票通过:只要有一个表决通过的,会签通过。
3. Activiti实现会签
a) Activiti实现会签是基于多实例任务,将节点设置成多实例,主要通过在UserTask节点的属性上配置
4. 多实例相关属性,以eclipse中的可视化图形操作为例
b) 选则一个用户任务在下面的属性中选择Multil instance,可以看到有很多属性
i. Sequential:执行顺序。必选项,可选值有true、false。用于设置多实例的执行顺序。True:多实例顺序执行,false:多实例并行
ii. loop cardinality:循环基数。可选项。可以直接填整数,表示会签的人数。
iii. Collection:集合。可选项。会签人数的集合,通常为list。和loop cardinality二选一
iv. Element variable:元素变量。选择Collection时必选,为collection集合每次遍历的元素
v. Completion condition:完成条件。可选。Activiti会签有个特性,比如设置一个人完成后会签结束,那么其他人的代办任务都会消失。
1. 这里需要介绍一下会签环节中设计的几个默认流程变量
2. nrOfInstances(numberOfInstances):会签中总共的实例数
3. nrOfCompletedInstances:已经完成的实例数量
4. nrOfActiviteInstances:当前活动的实例数量,即还没有完成的实例数量
条件${nrOfInstances == nrOfCompletedInstances}表示所有人员审批完成后会签结束。
条件${ nrOfCompletedInstances == 1}表示一个人完成审批,该会签就结束。
其他条件依次类推,同时这里也可以写自己添加的流程变量。后面实例中会体现
5.任务监听
a).为了更好的实现会签可以结合监听功能处理,非必选项
b).监听种类:有Java class、Expression、Delegate expression、Alfresco execution script、Alfresco task script,因为监听非必选,所以只介绍Java class类型的监听
c).监听的触发条件:对于任务监听而言有四种触发条件,
i.create:任务创建的时候触发监听
ii.Assignment:设置受理人的时候触发监听
iii.Complete:任务完成的时候触发监听
iv.All:以上三种事件都会触发监听
d).监听实现:监听的类需要实现TaskListener接口,重写notify方法
e).添加监听,如下图
如上图所示根据红框中的标记可以很容易的将自己的监听添加到任务中
6.会签实例:以请假申请为例展示会签,会签一人拒绝申请不通过,所有人同意申请通过。
a).请假流程图以及相属性
这里的Assigner和下图中的Element variable相同
上图中的${signList}是存储会签人员的流程变量,signer为每次遍历时的临时变量名和上图${signer}对应,${pass == false}上文中提到此处可以用会签中默认的流程变量控制会签的过程也可以使用自己定义的流程变量,这里的pass就是自己定义的流程变量,在会签人员处理自己任务是添加到流程中
b).添加监听
i.会签人员完成任务后,需要统计该任务的审批结果,判断最终该会签是通过还是拒绝本实例采用监听的方式处理,新建监听SignListener,
ii.为会签任务添加监听,事件选择complete,如下图
7.完整代码
7.1流程图xml代码
<?xml version="1.0" encoding="UTF-8"?