10-jbpm工作流之"自定义活动Custom"

来源:互联网 发布:南昌军工软件 编辑:程序博客网 时间:2024/05/21 21:52

自定义工作流活动:

1.工作流图片:test.png:


2.配置文件test.jpdl.xml: 该配置指定了custom的实现类

<?xml version="1.0" encoding="UTF-8"?><process name="test" xmlns="http://jbpm.org/4.4/jpdl">   <start name="start1" g="238,36,48,48">      <transition name="to custom1" to="custom1" g="-70,-22"/>   </start>   <end name="end1" g="237,243,48,48"/>   <custom name="custom1" g="217,132,92,52" class="cn.edu.zust.itee.custom.ExternalActivityBehaviourImpl">      <transition name="to end1" to="end1" g="-50,-14"/>   </custom></process>


3.custom的实现类:实现ExternalActivityBehaviour接口:

package cn.edu.zust.itee.custom;import java.util.Map;import org.jbpm.api.activity.ActivityExecution;import org.jbpm.api.activity.ExternalActivityBehaviour;/** * @author 郑勇 * 2013-7-11 14:41 * 自定义活动 */public class ExternalActivityBehaviourImpl implements ExternalActivityBehaviour {//  到达这个活动时执行的方法@Overridepublic void execute(ActivityExecution execution) throws Exception {System.out.println("发送手机短信-------------");//  默认执行完代码后,离开当前活动(节点),也可以完成//execution.takeDefaultTransition(); //离开当前活动//  使用指定名称的Transition离开当前活动//execution.take(transitionName);//执行完后不要离开,而是要等待外部手动调用signal()方法时才离开execution.waitForSignal();  }//  离开当前活动前执行的方法(如果在execute方法中,直接离开当前活动了,那么该方法就不会被执行了)@Overridepublic void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {System.out.println("发送手机短信已经完成-------------");}}

测试类JAVA Code:

package cn.edu.zust.itee.custom;import java.io.InputStream;import java.util.List;import org.jbpm.api.Configuration;import org.jbpm.api.ProcessEngine;import org.jbpm.api.ProcessInstance;import org.jbpm.api.task.Task;import org.junit.Test;/** * @author 郑勇 * 2013-7-11 14:50 * Custom自定义活动 */public class CustomActivity {  ProcessEngine processEngine= Configuration.getProcessEngine();@Testpublic void testCustomActivity(){//部署流程定义//获得当前包中的文件InputStream in = this.getClass().getResourceAsStream("test.jpdl.xml");processEngine.getRepositoryService()             .createDeployment()             .addResourceFromInputStream("test.jpdl.xml", in)             .deploy();//启动流程实例ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("test");System.out.println("processIntenceId="+pi.getId());System.out.println("当前正在执行的活动:"+pi.findActiveActivityNames());   }//离开活动@Testpublic void signal(){//让指定的Execution(即:ProcessInstance)向后执行一步//(excutionId对应jbpm4_execution表中的“ID_”字段)String excutionId = "test.610007";processEngine.getExecutionService().signalExecutionById(excutionId);}}




原创粉丝点击