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