流程变量赋值及报名系统分析
流程变量赋值
jbpm4_variable表中的流程变量的数据,会随着一个流程实例的消失而被删除。
任务分析
任务执行人:
- 某一个任务的执行人可以固定在流程图中 
- 在流程图中,在进入节点之前,必须通过流程变量给applicator赋值 
- 在进入该任务节点以后,才要给该任务节点赋值执行人 - 实现方式有两种: - 可以通过程序的方式来实现
- 在配置文件中,当整个流程进入节点后,会立即执行class属性中类中的assign方法
 
组任务
概念:
当进入一个任务节点时,很多人都有执行该任务的权限,但只要有一个人执行完毕以后,这个任务就结束了。
实现:
- 可以在配置文件中配置task。task就是组任务,可以对组任务进行一些操作:根据候选人查询组任务、根据组任务查询候选人、接受任务等。 - 缺点:任务的候选人是固定的。 
- 可以通过代码的形式动态的添加任务的候选人 
- 可以在配置文件中,在assignment-handler节点类属性中可以操作数据库把候选人从数据库提取出来。 - 缺点:此类不能和spring容器关联也不能和servlet容器关联,可以利用hibernate或jdbc技术来完成。 
在工作流中的角色、人的概念
有组的概念
组里有相应的人
建立组和人的关联
以上操作涉及3张表:jbpm4_id_group、jbpm4_id_user、jbpm4_id_menbership。
在api中并没有做到group和user的关联
泳道
- 在配置文件中声明一个泳道
- 在任务节点中指向泳道
transition
选择流程去处
state
活跃的流程实例
decision
判断节点
forkjoin
多人会签,建立主任务和多个子任务,子任务与主任务绑定,指定的会签人完成子任务,每次完成子任务时判断主任务的子任务还剩几个,当所有子任务完成,主任务进入下一节点。
event
事件监听器,监听start和end事件
spring与jbpm的整合原理
让spring容器产生processEngine
步骤:
- 编辑pom.xml文件 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43- <dependency> 
 <groupId>org.jbpm.jbpm4</groupId>
 <artifactId>jbpm</artifactId>
 <version>4.4</version>
 </dependency>
 <dependency>
 <groupId>org.jbpm.jbpm4</groupId>
 <artifactId>jbpm-api</artifactId>
 <version>4.4</version>
 </dependency>
 <dependency>
 <groupId>org.jbpm.jbpm4</groupId>
 <artifactId>jbpm-jpdl</artifactId>
 <version>4.4</version>
 </dependency>
 <dependency>
 <groupId>org.jbpm.jbpm4</groupId>
 <artifactId>jbpm-pvm</artifactId>
 <version>4.4</version>
 </dependency>
 <dependency>
 <groupId>org.jbpm.jbpm4</groupId>
 <artifactId>jbpm-log</artifactId>
 <version>4.4</version>
 </dependency>
 //jbpm私服的路径
 <repositories>
 <repository>
 <id>appfuse-snapshots</id>
 <url>http://oss.sonatype.org/content/repositories/appfuse-snapshots</url>
 <releases>
 <enabled>false</enabled>
 </releases>
 <snapshots>
 <enabled>true</enabled>
 </snapshots>
 </repository>
 <repository>
 <id>Jboss-JBPM-Repositories</id>
 <name>JbossJBPM</name>
 <url>http://repository.jboss.org/nexus/content/groups/public</url>
 </repository>
 </repositories>
- 在src/main/resources中建立一个package为jbpm - 在jbpm下的jbpm.cfg.xml文件 - 1 
 2- 把原来的<import resource="jbpm.tx.hibernate.cfg.xml" />替换成 
 <import resource="jbpm.tx.spring.cfg.xml" />
- 把jbpm的相关的映射文件加入到hibernate.cfg.xml文件中 - 1 
 2
 3
 4
 5- <mapping resource="jbpm.repository.hbm.xml" /> 
 <mapping resource="jbpm.execution.hbm.xml" />
 <mapping resource="jbpm.history.hbm.xml" />
 <mapping resource="jbpm.task.hbm.xml" />
 <mapping resource="jbpm.identity.hbm.xml" />
- 在spring的配置文件中引入processEngine - 1 
 2
 3
 4- <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper"> 
 <property name="jbpmCfg" value="jbpm/jbpm.cfg.xml"></property>
 </bean>
 <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
- 测试processEngine:启动tomcat服务器 
黑马报名系统分析
流程表和业务数据表分开
- 学生在前台 - 注册,经历整个流程的所有的申请 - 分析: - 在提交某一个具体的课程的时候,启动流程实例
- 可以提交自荐信
 
- 咨询员后台 - 对各个环节学生提交的信息进行审批,并且打分 
技术分析:
- 不管是学生还是咨询员登录系统后,都能查询到当前正在执行的任务。 - 根据执行的任务–>executionId—>Process Instance—>piid–>和相关的数据表就能关联在一起了 
- jbpm表做流程控制的作用,而系统的表是用来存储数据的,他们之间经过piid进行关联。 
- 对各个审批节点的候选人做如下处理 - 1 
 2
 3
 4
 5- <task g="258,153,92,52" name="自荐信审批"> 
 <assignment-handler class="com.itheimaoa.domain.process.MyAssignmentHandler"/>
 <transition g="2,-28" name="to 提交入学考试" to="提交入学考试"/>
 <transition g="336,98:-83,-17" name="to 提交自荐信" to="提交自荐信"/>
 </task>- 每一个审批节点的候选人都是由MyAssignmentHandler来赋值的。 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 public void assign(Assignable assignable, OpenExecution execution) throws Exception {
 Connection conn=JDBCUtils.getConnection();
 String jpql = " select eid from employee";
 Statement st = conn.createStatement();
 ResultSet rs = st.executeQuery(jpql);
 while(rs.next()){
 assignable.addCandidateUser(String.valueOf(rs.getInt("eid")));
 }
 }
