流程变量赋值及报名系统分析
流程变量赋值
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")));
}
}