• JBPM4入门——6.流程实例的创建和执行


    本博文只是简要对JBPM4进行介绍,如需更详细内容请自行google
    链接:

    JBPM入门系列文章:

    JBPM4入门——1.jbpm简要介绍

    JBPM4入门——2.在eclipse中安装绘制jbpm流程图的插件

    JBPM4入门——3.JBPM4开发环境的搭建

    JBPM4入门——4.封装流程管理的工具类(JbpmUtil) 

    JBPM4入门——5.流程定义的发布、查询、删除

    JBPM4入门——6.流程实例的创建和执行

    JBPM4入门——7.等待节点的单条线手动执行

    JBPM4入门——8.等待节点的分支执行

    JBPM4入门——9.自动节点单线执行

    package com.test.test;
    
    import java.util.Iterator;
    import java.util.List;
    
    import org.jbpm.api.ProcessDefinition;
    import org.jbpm.api.ProcessDefinitionQuery;
    import org.jbpm.api.ProcessInstance;
    
    import com.test.util.JbpmUtil;
    
    public class Test {
    
    	/**
    	 * 流程定义的发布
    	 * @param jpdlFileName 流程定义的文件名。例如:hello.jpdl.xml
    	 */
    	public void deploy(String jpdlFileName){
    		JbpmUtil.getRepositoryService()
    		.createDeployment()
    		.addResourceFromClasspath(jpdlFileName)
    		.deploy();
    	}
    	
    	/**
    	 * 流程定义的查询
    	 */
    	public void query(){
    		ProcessDefinitionQuery query
    		 = JbpmUtil.getRepositoryService().createProcessDefinitionQuery();
    		List<ProcessDefinition> list = query.list();
    		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
    			ProcessDefinition processDefinition = (ProcessDefinition) iterator
    					.next();
    			/**
    			 * id:流程定义的id
    			 * key:就是流程定义的文件名称  、相同的key下面有不同的id
    			 * deploymentId:表达的是这次动作发布的时候数据库中存储的那条记录的主键id
    			 */
    			System.out.println("id:"+processDefinition.getId());
    			System.out.println("key:"+processDefinition.getKey());
    			System.out.println("deploymentId:"+processDefinition.getDeploymentId());
    		}
    	}
    	
    	/**
    	 * 流程定义的删除
    	 * @param deploymentId 
    	 */
    	public void del(String deploymentId){
    		//deleteDeploymentCascade 级联删除:删除流程定义的时候把流程实例也删了..
    		JbpmUtil.getRepositoryService().deleteDeploymentCascade(deploymentId);
    	}
    	
    	/**
    	 * 创建流程实例
    	 * @param key	流程定义的key
    	 * @return	返回创建的流程实例
    	 */
    	public ProcessInstance createInstance(String key){
    		//虽然说多个实例的key相同。但是startProcessInstanceByKey通过key来启动的话会默认找到最新版本的流程定义、并创建相应的流程实例
    		return JbpmUtil.getExecutionService().startProcessInstanceByKey(key);
    	}
    	
    	/**
    	 * 执行流程实例 :只按线条的顺序执行
    	 * @param processInstanceId
    	 * @return
    	 */
    	public ProcessInstance execute(String processInstanceId){
    		return JbpmUtil.getExecutionService().signalExecutionById(processInstanceId);
    		
    	}
    	
    	/**
    	 * 执行流程实例2:通过transition 指向的路径根据名字执行(to state1  to state2 to end1......)
    	 * @param processInstanceId
    	 * @return
    	 */
    	public ProcessInstance execute(String processInstanceId,String transitionName){
    		return JbpmUtil.getExecutionService().signalExecutionById(processInstanceId,transitionName);
    		
    	}
    		
    	public static void main(String[] args) {
    		Test test = new Test();
    //		test.deploy("hello.jpdl.xml");//流程定义的发布
    		test.deploy("simple2.jpdl.xml");//流程定义的发布
    //		test.query();//流程定义的查询
    //		test.del("10001");//删除流程定义
    		test.createInstance("simple2");//创建流程实例
    //		test.execute("simple.70001");//执行流程实例
    //		test.execute("simple.70001","to end1");//执行流程实例
    		
    	}
    }
    
  • 相关阅读:
    spring注解
    SVN cleanup 反复失败解决办法
    如何改变cmd窗口大小
    JQuery UI
    VS2013装扩展RazorGenerator
    visual studio 2013使用github获取代码
    还原NuGet程序包
    C# linq对分组操作执行子查询
    C# linq创建嵌套组
    linq 在查询表达式中处理异常
  • 原文地址:https://www.cnblogs.com/meet/p/5135782.html
Copyright © 2020-2023  润新知