1. 程式人生 > >JBPM4入門——8.等待節點的分支執行

JBPM4入門——8.等待節點的分支執行


先發布流程定義------>然後建立流程例項------>然後執行流程例項

以下是跟以前一樣的執行方法。直接根據表中的ID來執行。

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 processInstanceId
	 * @return
	 */	
	
	public static void main(String[] args) {
		Test test = new Test();
//		test.deploy("simple.jpdl.xml");//流程定義的釋出
//		test.createInstance("simple");//建立流程例項
		test.execute("simple.240007");//執行流程例項
		
	}
}

 但是以上的執行結果不會變。還會停留在當前的等待節點上。

分支情況下:如果還是根據ID來執行的話。結果不會變、還停留在之前的那個等待節點上:意思就是

當state1如果直接根據ID來執行的話(下圖)ACTIVITYNAME的值還會停留在state1這個等待節點上。因為沒給它具體指定走哪條線。它不會執行。

如果是JBPM 3版本的話 它會隨機找一條線來執行。


 如果想讓它按照自己的意圖來執行的話:隨意的讓它執行某一條線的話、需要根據這些transitionName來操作、也就是 to state2 to state3 這些名字來操作

操作思路為:在原來的執行流程例項的方法中。加一個引數:String transitionName 表示是通過線條名字來執行下一個流程節點

程式碼如下:

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 {
	/**
	 * 執行流程例項:通過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("simple.jpdl.xml");//流程定義的釋出
//		test.createInstance("simple");//建立流程例項
//		test.execute("simple.240007");//執行流程例項
		test.execute("simple.240007","to state3");//執行流程例項
		
	}
}

再檢視資料庫的話已經到state3這個節點了: