1. 程式人生 > >JBPM4入門——6.流程例項的建立和執行

JBPM4入門——6.流程例項的建立和執行

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");//執行流程例項
		
	}
}