您的位置:首页 > 产品设计 > 产品经理

11-jbpm工作流之"事件处理Event"

2013-07-11 16:24 369 查看
Jbpm的事件处理:

是通过在test.jpdl.xml中配置事件节点来处理的:

注意:开始活动只有离开事件,结束活动只有进入事件

进入活动事件:

<on event="start">
<event-listener class="cn.edu.zust.itee.event.EventListenerImpl" />
</on>
离开活动事件:

<on event="end">
<event-listener class="cn.edu.zust.itee.event.EventListenerImpl" />
</on>
流程图:test.png



流程图配置文件test.jpdl.xml:通过配置事件处理类来实现事件驱动:EventListenerImpl.java实现EventListener接口

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

<process name="test" xmlns="http://jbpm.org/4.4/jpdl">
<on event="start">
<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
</on>
<on event="end">
<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
</on>
<start g="295,82,48,48" name="start1">
<on event="end">
<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
</on>
<transition g="-93,-22" name="to 部门经理审批" to="部门经理审批"/>
</start>
<task assignee="部门经理" g="277,183,92,52" name="部门经理审批">
<on event="start">
<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
</on>
<on event="end">
<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
</on>
<transition g="-81,-22" name="to 总经理审批" to="总经理审批"/>
<transition g="-50,-22" name="to end1" to="end1"/>
</task>
<task assignee="总经理" g="424,259,92,52" name="总经理审批">
<on event="start">
<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
</on>
<on event="end">
<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
</on>
<transition g="-50,-22" name="to end1" to="end1"/>
</task>
<end g="289,380,48,48" name="end1">
<on event="start">
<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
</on>

</end>
</process>


事件处理类:EventListenerImpl.java

package cn.edu.zust.itee.event;

import org.jbpm.api.listener.EventListener;
import org.jbpm.api.listener.EventListenerExecution;

/**
* @author 郑勇
* 2013-7-11 16:05
* 处理事件类
*/
public class EventListenerImpl implements EventListener {

@Override
public void notify(EventListenerExecution execution) throws Exception {
System.out.println("触发事件了---:当前正在执行的事件是"+execution.getActivity());
}

}


测试类:

package cn.edu.zust.itee.event;

import java.io.InputStream;

import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.junit.Test;

/**
* @author Bob
* 2013-07-11 16:03
* 事件处理
*/
public class ProcessEvent {

ProcessEngine processEngine = Configuration.getProcessEngine();

@Test
public void testProcessEvent(){

//部署流程定义
//获得当前包中的文件
InputStream in = this.getClass().getResourceAsStream("test.jpdl.xml");
processEngine.getRepositoryService()
.createDeployment()
.addResourceFromInputStream("test.jpdl.xml", in)
.deploy();

//启动流程实例
ProcessInstance pi = processEngine.getExecutionService()
.startProcessInstanceByKey("test");

//完成"部门经理任务",并使用指定连线离开当前活动
String taskId = processEngine.getTaskService().createTaskQuery() //查询出该流程实例中仅有的一个任务
.processInstanceId(pi.getId())
.uniqueResult()
.getId();
//活动中都是可以有1个或多个Transition,需要指定不同的名称
processEngine.getTaskService().completeTask(taskId,"to 总经理审批");
}
}


测试结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐