流程图test.png:
配置文件test.jpdl.xml: 下面配置文件中调用了一个java代码的处理类DecisionHandlerImpl.java
<?xml version="1.0" encoding="UTF-8"?>
<process name="test" xmlns="http://jbpm.org/4.4/jpdl">
<start name="start1" g="523,27,48,48">
<transition name="to 部门经理审批" to="部门经理审批" g="-94,-12"/>
</start>
<end name="end1" g="526,324,48,48"/>
<task name="部门经理审批" g="500,112,92,52" assignee="部门经理">
<transition name="to exclusive1" to="exclusive1" g="-74,-4"/>
</task>
<decision name="exclusive1" g="524,215,48,48">
<handler class="cn.zust.edu.itee.decision.DecisionHandlerImpl" />
<transition name="to 总经理审批" to="总经理审批" g="-1,-26"/>
<transition name="to end1" to="end1" g="-50,-6"/>
</decision>
<task name="总经理审批" g="667,268,92,52" assignee="总经理"/>
</process>
Java Code:
package cn.zust.edu.itee.decision;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.junit.Test;
/**
* @author 郑勇
* 2013-7-11 00:22
* 流程决策:判断活动分支执行方向
*/
public class ProcessDecisionActivity {
ProcessEngine processEngine= Configuration.getProcessEngine();
@Test
public void testDecisionActivity(){
//部署流程定义
//获得当前包中的文件
InputStream in = this.getClass().getResourceAsStream("test.jpdl.xml");
processEngine.getRepositoryService()
.createDeployment()
.addResourceFromInputStream("test.jpdl.xml", in)
.deploy();
//设置流程变量
Map<String,Object> map = new HashMap<String,Object>();
map.put("请假天数", 9);
//启动流程实例
ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("test",map);
System.out.println("processIntenceId="+pi.getId());
//完成"部门经理任务",并使用decisio连线离开当前活动
String taskId = processEngine.getTaskService().createTaskQuery() //查询出该流程实例中仅有的一个任务
.processInstanceId(pi.getId())
.uniqueResult()
.getId();
//活动中都是可以有1个或多个Transition,需要指定不同的名称
processEngine.getTaskService().completeTask(taskId);
}
}
流程变量判断:处理类
package cn.zust.edu.itee.decision;
import org.jbpm.api.jpdl.DecisionHandler;
import org.jbpm.api.model.OpenExecution;
/**
* @author 郑勇
* 2013-7-11 00:31
*/
public class DecisionHandlerImpl implements DecisionHandler {
//计算离开当前Activity用的Transition的名称并返回
@Override
public String decide(OpenExecution execution) {
//获取业务数据
Integer days = (Integer) execution.getVariable("请假天数");
//选择Transition
if(days<7){
return "to end1";
}else{
return "to 总经理审批";
}
}
}