一、繪制流程
1、指定流程定義key值;
流程定義key值是流程定義的辨別,建議:相同的業務流程,流程定義的key名字定義一樣,比如,如果需要建立新的業務流程,請假流程則使用新的key。
2、指定任務負責人
二、部署流程定義
//部署流程定義
@Test
public void deployProcess(){
//擷取repositoryService
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService
.createDeployment().addClasspathResource("bpmn/example.bpmn")
.addClasspathResource("bpmn/example.png") //通過bpmn檔案生成的png檔案
.name("test").deploy();
System.out.println("測試結果:"+deployment.getId()+"=="+deployment.getName());
}
//壓縮包部署方式
@Test
public void deployProcessByZip(){
//建立processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//擷取repositoryService
RepositoryService repositoryService = processEngine.getRepositoryService();
//定義輸入流
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("bpmn/example.zip");
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
Deployment deployment = repositoryService.createDeployment().addZipInputStream(zipInputStream).deploy();
System.out.println("測試流程部署ID=="+deployment.getId());
System.out.println("測試流程部署NAME=="+deployment.getName());
}
流程定義部署後操作activiti資料表如下:
SELECT * FROM act_re_deployment #流程定義部署表,記錄流程部署資訊
SELECT * FROM act_re_procdef #流程定義表,記錄流程定義資訊
SELECT * FROM act_ge_bytearray #資源表
說明:
act_re_deployment和act_re_procdef一對多關系,一次部署在流程部署表生成一條記錄,但一次部署可以部署多個流程定義,每個流程定義在流程定義表生成一條記錄。
每一個流程定義在act_ge_bytearray 會存在兩個資源記錄,bpmn和png。
建議:一次部署一個流程,這樣部署表和流程定義表是一對一有關系,友善讀取流程部署及流程定義資訊。
三、檢視部署的流程定義
//檢視部署的流程定義
@Test
public void queryProcessDefinition(){
//建立processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//擷取repositoryService
RepositoryService repositoryService = processEngine.getRepositoryService();
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
//流程定義KEY
String key = "example";
List<ProcessDefinition> processDefinitionList =
processDefinitionQuery.processDefinitionKey(key).orderByProcessDefinitionVersion().desc().list();
for(ProcessDefinition processDefinition : processDefinitionList){
System.out.println("流程定義ID=="+processDefinition.getId());
System.out.println("流程定義NAME=="+processDefinition.getName());
System.out.println("流程定義部署ID=="+processDefinition.getDeploymentId());
}
}
四、删除部署成功的流程定義
//删除部署成功的流程定義
@Test
public void deleteProcessDefinition(){
//建立processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//擷取repositoryService
RepositoryService repositoryService = processEngine.getRepositoryService();
//流程定義部署ID
String deploymentId = "7501";
//删除流程定義,如果該流程定義已有流程執行個體啟動則删除時出錯
repositoryService.deleteDeployment(deploymentId);
//設定true 級聯删除流程定義,即使該流程有流程執行個體啟動也可以删除,設定為false非級别删除方式
//repositoryService.deleteDeployment(deploymentId , true);
}
1) 使用repositoryService删除流程定義
2) 如果該流程定義下沒有正在運作的流程,則可以用普通删除。
3) 如果該流程定義下存在已經運作的流程,使用普通删除報錯,可用級聯删除方法将流程及相關記錄全部删除。項目開發中使用級聯删除的情況比較多,删除操作一般隻開放給超級管理者使用。
五、啟動一個流程執行個體
//啟動一個流程執行個體
@Test
public void startProcessInstance(){
//建立processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//擷取runtimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
//根據流程定義KEY啟動流程
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("example");
System.out.println("流程定義ID=="+processInstance.getProcessDefinitionId());
System.out.println("流程執行個體ID=="+processInstance.getId());
System.out.println("流程定義NAME=="+processInstance.getName());
}
六、查詢目前人待執行的任務
//查詢目前人待執行的任務
@Test
public void findPersonalTaskList(){
//建立processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//擷取taskService
TaskService taskService = processEngine.getTaskService();
//擷取目前人待執行任務清單
List<Task> taskList = taskService.createTaskQuery().taskAssignee("park").list();
for(Task task : taskList){
System.out.println("測試任務ID=="+task.getId());
System.out.println("測試任務NAME=="+task.getName());
System.out.println("測試流程執行個體IDE=="+task.getProcessInstanceId());
}
//目前人隻有單個任務時使用
Task task = taskService.createTaskQuery().taskAssignee("park").singleResult();
System.out.println("測試任務ID=="+task.getId());
System.out.println("測試任務NAME=="+task.getName());
System.out.println("測試流程執行個體IDE=="+task.getProcessInstanceId());
}
七、完成任務
//完成任務
@Test
public void completTask(){
//建立processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//擷取taskService
TaskService taskService = processEngine.getTaskService();
//完成任務
String taskId = "12";
taskService.complete(taskId);
}