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
}
}