1. 繪製流程,以簡單的請假流程爲例
2. 發佈流程
2.1 流程發佈有多種方式,可以單獨發佈BPMN20.xml,也可以將資源文件(xml,png,form)打包成zip或者bar文件,進行發佈,zip的ant代碼如下:
<?xml version="1.0" encoding="UTF-8"?> <project name="iworkflow" default="workflow.package.leave"> <!-- 路徑設置 --> <property name="workflow.diagrams" value="src/main/resources/diagrams"></property> <property name="workflow.developments" value="src/main/resources/developments"></property> <!-- 流程定義路徑 --> <property name="myLeave" value="${workflow.diagrams}/leave"></property> <property name="myPayment" value="${workflow.diagrams}/payment"></property> <!-- 流程發佈路徑 <property name="p_myLeave" value="${workflow.developments}/leave"></property> <property name="p_myPayment" value="${workflow.developments}/payment"></property> --> <!-- 請假流程定義打包 --> <target name="workflow.package.leave"> <echo>打包流程定義:請假流程</echo> <copy file="myLeave.bpmn" tofile="myLeave.bpmn20.xml" /> <zip destfile="myLeave.bar" basedir="." update="true" includes="*20.xml,*.png,*.form" /> <copy file="myLeave.bar" tofile="../../developments/myLeave.bar" /> <delete file="myLeave.bpmn20.xml" /> <delete file="myLeave.bar" /> </target> </project>
2.2 發佈流程定義,Java代碼如下:
@Test public void publish(){ String file = "src/main/resources/developments/myLeave.bar"; ZipInputStream inputStream = null; try { inputStream = new ZipInputStream(new FileInputStream(file)); repoService.createDeployment().name("Leave.bar").addZipInputStream(inputStream).deploy(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
2.3 查看數據庫新增內容,我這裏選用mysql5.5,涉及的數據表爲act_re_*
3. 啓動流程實例
此處操作可參見activiti5.14 官方API,以下是測試代碼
//啓動流程 @Test public void startProcess(){ Map<String, Object> variables = new HashMap<String, Object>(); variables.put("employeeName", "hruser"); //一般在流程模型中使用的ID,在Activiti中都是Key ProcessInstance pi = runService.startProcessInstanceByKey("myLeave", variables); System.out.println("Number of process instances: " + runService.createProcessInstanceQuery().count()); }
4.流程運轉
流程實例啓動後,需要各環節辦理相應的任務,才能將工作流進行,運轉代碼如下:
//獲取代辦,並處理相應任務 @Test public void getTaskList(){ List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("hr").list();//流程環節配置爲候選羣組 // List<Task> tasks = taskService.createTaskQuery().taskAssignee("hr").list();//流程環節配置爲候選人 Task task = tasks.get(0); Map<String, Object> taskVariables = new HashMap<String, Object>(); taskVariables.put("leader", "hr"); taskVariables.put("managerMotivation", "no problem!"); taskService.complete(task.getId(), taskVariables); }
運轉過程中,可以查看數據庫中運轉中的流程實例信息(代辦)和流程運轉的歷史信息(已辦)的歷史信息,如下圖所示