JPDL 全称JBossjBPMProcessDefinitionLanguage,是JBPM的流程定义语言。
JPDL流程定义语言主要掌握以下几种:
1.process (流程)
2.transition (连线、转移)
3.start (开始活动)
4.end、end-error、end-cancel (结束活动)
5.state (状态活动)
6.task (任务活动)
7.decision (判断活动)
8.fork、join (分支/聚合活动
顶级元素 process 定义
name用于显示,通常定义中文
key 用于代码操作,通常定义英文
version 版本号,不指定,相同key流程,version自动+1(如果指定version不要和其它冲突)
在 jbpm4_deployprop 生成 pdId 流程定义id = pdKey + “-” + pdVersion
发布流程保证,key和name 完全相同
代码示例:
process.jpdl.xml
<?xml version="1.0" encoding="UTF-8"?>
<process key="process" name="测试流程" xmlns="http://jbpm.org/4.4/jpdl">
<!-- 根节点 -->
<start g="235,30,48,48" name="start1">
<transition g="-47,-17" name="to 请假" to="请假"/>
</start>
<end g="251,315,48,48" name="end1"/>
<task g="223,128,92,52" name="请假">
<transition g="-47,-17" name="to 审批" to="审批"/>
</task>
<task g="231,211,92,52" name="审批">
<transition g="-47,-17" name="to end1" to="end1"/>
</task>
</process>
ProcessTest.java
package com.my.jbpm.jpdl;
import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.RepositoryService;
import org.junit.Test;
public class ProcessTest {
@Test
// 发布process.jpdl.xml
public void demo(){
//流程引擎
ProcessEngine processEngine = new Configuration().buildProcessEngine();
//获得Service
RepositoryService repositoryService = processEngine.getRepositoryService();
//发布
repositoryService.createDeployment().addResourceFromClasspath("process.jpdl.xml").deploy();
}
}
Transition 节点(流转节点)
一个活动中可以指定一个或多个transition
开始活动只能有一个transition
结束活动没有 transition
其它活动可以有1条或者多条transition
如果只有一个,可以不指定名称,如果有多个,则要分别指定唯一名称
无名称transition
executionService.signalExecutionById(executionId)
有名称transition
executionService.signalExecutionById(executionId, transitionName)
定义transition元素,可以不写name属性,成为默认transition节点
在向后流转时,如果没有transition的name属性,将使用 默认transition节点(没有name属性的transition )
代码示例:
transition.jpdl.xml
<?xml version="1.0" encoding="UTF-8"?>
<process name="transition" xmlns="http://jbpm.org/4.4/jpdl">
<start g="280,9,48,48" name="start1">
<transition g="-53,-17" name="to task1" to="task1"/>
</start>
<end g="290,299,48,48" name="end1"/>
<task g="269,89,92,52" name="task1">
<!-- 没有name的transition成为 默认transition -->
<transition to="task2"/>
<transition g="-53,-17" name="to task3" to="task3"/>
</task>
<task g="157,182,92,52" name="task2">
<transition g="-47,-17" name="to end1" to="end1"/>
</task>
<task g="376,186,92,52" name="task3">
<transition g="-47,-17" name="to end1" to="end1"/>
</task>
</process>
TransitionTest.java
package com.my.jbpm.jpdl;
import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.junit.Test;
public class TransitionTest {
@Test
//发布 启动 transition.jpdl.xml
public void demo1(){
//流程引擎
ProcessEngine processEngine = new Configuration().buildProcessEngine();
//发布流程
processEngine.getRepositoryService().createDeployment().addResourceFromClasspath("transition.jpdl.xml").deploy();
//启动实例
processEngine.getExecutionService().startProcessInstanceByKey("transition");
}
@Test
//完成task1 任务
public void demo2(){
//流程引擎
ProcessEngine processEngine = new Configuration().buildProcessEngine();
//向后流转
//processEngine.getExecutionService().signalExecutionById("transition.10007"); // 没有指定name 使用默认transition
processEngine.getExecutionService().signalExecutionById("transition.10007","to task3");// executionId 在 execution表 ID_
}
}
start和end 节点
start 开始活动
代表流程的开始边界,一个流程有且只能有一个Start活动。开始活动只能指定一个Transition。在流程实例启动后,会自动的使用这个唯一的Transition离开开始活动,到一下个活动
end 结束活动
代表流程的结束边界,可以有多个,也可以没有。如果有多个,则到达任一个结束活动,整个流程就都结束了;如果没有,则到达最后那个没有Transition的活动,流程就结束了
中止流程代码
processEngine.getExecutionService().endProcessInstance(processInstanceId, ProcessInstance.STATE_ENDED);
在任意节点,都能够结束流程
state 节点 (状态节点,当前状态发生改变,向后流转)
State节点,等待含义,当服务器处理一些数据后,实现自动触发流转 executionService.signalExecutionById
代码示例:
state.jpdl.xml
<?xml version="1.0" encoding="UTF-8"?>
<process name="state" xmlns="http://jbpm.org/4.4/jpdl">
<start g="264,13,48,48&#