flowable 啓動流程

package org.fh.controller.act;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import org.fh.controller.base.BaseController;
import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.runtime.ProcessInstance;

/**
 * 說明:啓動流程用
 * 作者:FH Admin
 * from:fhadmin.cn
 */
public class AcStartController extends BaseController {
	
	@Autowired
	private RuntimeService runtimeService; 		//與正在執行的流程實例和執行對象相關的Service(執行管理,包括啓動、推進、刪除流程實例等操作)
	
	/**通過KEY啓動流程實例(不帶變量)
	 * @param processInstanceKey //流程定義的KEY
	 * @return 返回流程實例ID
	 */
	protected String startProcessInstanceByKey(String processInstanceKey){
		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processInstanceKey);			//用流程定義的KEY啓動,會自動選擇KEY相同的流程定義中最新版本的那個(KEY爲模型中的流程唯一標識)
		return processInstance.getId();	//返回流程實例ID
	}
	
	/**通過KEY啓動流程實例(帶變量)
	 * @param processInstanceKey 流程定義的KEY
	 * @param map 存流程變量
	 * @param USERNAME 流程發起人
	 * @return 返回流程實例ID
	 */
	protected String startProcessInstanceByKeyHasVariables(String processInstanceKey,Map<String,Object> map, String USERNAME){
		Authentication.setAuthenticatedUserId(USERNAME);//設置流程發起人
		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processInstanceKey, map);	//map存儲變量 用流程定義的KEY啓動,會自動選擇KEY相同的流程定義中最新版本的那個(KEY爲模型中的流程唯一標識)
		Authentication.setAuthenticatedUserId(null);//這個方法最終使用一個ThreadLocal類型的變量進行存儲,也就是與當前的線程綁定,所以流程實例啓動完畢之後,需要設置爲null,防止多線程的時候出問題。
		return processInstance.getId();	//返回流程實例ID
	}
	
	/**通過ID啓動流程實例
	 * @param processInstanceId //流程定義的ID
	 * @return 返回流程實例ID
	 */
	protected String startProcessInstanceById(String processInstanceId){
		ProcessInstance processInstance = runtimeService.startProcessInstanceById(processInstanceId);			//用流程定義的ID啓動
		return processInstance.getId();	//返回流程實例ID
	}
   
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章