日期:2014-05-16  浏览次数:20385 次

使用Nutz+ExtJS+JBPM4.4实现会签

?

会签的例子依然采用Nutz+ExtJS+JBPM来实现。

?

这里只讲讲会签的实现,其他细节可以参考这篇文章http://pangwu86.iteye.com/blog/1114082

?

#######################邪恶的分割线#######################

?

首先介绍下什么是会签

?

会签

?

会签是撰拟公文的过程中,主办单位主动与有关单位协商并核签的一种办文程序,一般当公文的内容涉及本单位的多个部门或与其他单位有关时,需要进行会签。会签根据对象的不同分为内部会签和外部会签。内部会签用于与本单位内部的各有关部门进行协商并核签;外部会签用于与外单位的有关部门进行协商并核签;二者的性质相同,但处理形式不同。

在管理系统中的会签流程,例如公司职员离职、大学生毕业离校都要在不同的部门去签字确认,这里去哪个部门签字没有顺序之分,但所有部门签字完毕后才可以离职或离校。

?

?

?

会签的情况会有很多中,根据复杂程度,一般可以分为单步会签(只有一个活动处理会签任务),以及多步会签(由多个任务组成的)

?

这里只介绍下常见的,也是业务中最常遇到的单步会签。

?

?

单步会签常见有4种情况:

?

?

  1. 一票否决制——参加会签的用户中任何一个人不同意,会签活动就会结束,进去会签否决,全部同意,则进入会签通过
  2. 一票通过制——与一票否决完全相反
  3. 按比例通过——等全部参加会签的用户提交任务后,根据会签意见,按照比例(比如少数服从多数)决定下面的转移
  4. 意见收集制——等全部参加会签的用户提交完意见后(这里就是一个收集意见的作用而已),会签结束,进入下一个节点

?

?

这里要说一下,在查找会签的资料时,yy269兄的http://yy629.iteye.com/blog/660701与phoenix.clt兄的http://phoenix-clt.iteye.com/blog/428242这两篇文章给了很大的启发,后面的实现也借鉴了他们的一些好的思想,需要的朋友可以去看一看。

?

?

下面的部分将会讲述如何实现一个动态会签(会签人数,人员,会签规则都可以自由设定)

?

好,接下来看一下今天举得这个申请经费的例子:

?

贴一下jpdl.xml文件

?

<?xml version="1.0" encoding="UTF-8"?>

<process name="jingfeishenqing" xmlns="http://jbpm.org/4.4/jpdl">
	<description><![CDATA[
		经费申请,大于30万需要老总们会签(采用一票否决制)
	]]></description>
	<!-- 会签决策实现类 -->
	<variable name="calc.countersignCalculatorImpl" type="string">
		<string value="org.nutz.jbpm.countersign.impl.AllAgreeSign" />
	</variable>
	<!-- 以下三个参数只有按百分比策略才会用到,可以根据需要来设定 -->
	<!-- 最小同意数 -->
	<variable name="calc.minAgreeSize" type="int">
		<int value="2"/>
	</variable>
	<!-- 最小同意比例(请设定一个在0-1之间的数字) -->
	<variable name="calc.minAgreePercent" type="float">
		<float value="0.6"/>
	</variable>
	<!-- 是否使用按比例(true为按照比例,false为按照人数) -->
	<variable name="calc.userPercent" type="boolean">
		<false/>
	</variable>
	<start g="81,8,48,48" name="start1">
		<transition g="-60,13" name="申请经费" to="申请经费" />
	</start>
	<task assignee="${employee}" form="countersign/applyfor.jsp" g="304,65,92,52"
		name="申请经费">
		<transition name="金额判断" to="判断1" g="-69,-22" />
	</task>
	<decision expr="#{money > 300000 ? '大于30万' : '小于等于30万'}" g="190,144,48,48"
		name="判断1">
		<transition g="-39,14" name="大于30万" to="领导会签" />
		<transition g="-80,-21" name="小于等于30万" to="财务