工作流(3)--activit 5.14 開發測試(繪製流程、發佈流程、啓動實例、流程運轉)

1. 繪製流程,以簡單的請假流程爲例

wKioL1Lg2YbQQ8ODAADFI9VWjgI767.jpg

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_*

wKiom1Lg3IyQCDymAAJJPgwXiGw447.jpg


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

   運轉過程中,可以查看數據庫中運轉中的流程實例信息(代辦)和流程運轉的歷史信息(已辦)的歷史信息,如下圖所示

wKioL1Lg3s2CKI6bAALBgAayMr4501.jpg






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