Activiti第三篇【鏈接、排他網關、指定任務處理人、組任務】

連線

上面咱們已將學過了流程變量了,能夠在【任務服務、運行時服務、流程開始、完成某個任務時設置流程變量】,而咱們的鏈接就是流程變量的實際應用了….markdown

定義流程圖

咱們並非全部的流程都是按一條的路徑來走的,咱們有的時候會根據條件來走不一樣的路。固然了,最終該流程是會一步步走完….app

例子:ide

重要的信息交由老闆來處理,不重要的信息交由經理來處理測試

這裏寫圖片描述

表達式的結果必須是布爾型idea

  • #{variable==’value’}
  • ${variable==value}

測試

我在任務完成時設置流程變量爲不重要,那麼跳到下一個流程時就是經理來進行處理spa

這裏寫圖片描述

當我設置爲重要的時候,那麼就是交由老闆來處理插件

這裏寫圖片描述

排他網關

上面咱們使用連線的時候用了兩個條件 : 要麼條件是「重要」,要麼條件是「不重要」….若是有另外一種狀況呢???就是用戶把條件輸入錯了,寫成「不知道重不重要」,那麼咱們的流程怎麼走???豈不是奔潰了???code

所以,咱們要有一條默認的路來走,就是當該變量不符合任何的條件時,咱們也有一條默認的路對象

這裏寫圖片描述

值得注意的是:若是是在Eclipse中使用插件的BPMN流程圖,若是使用了排他網關,那麼在Idea下是解析不了的圖片

解決:

咱們只要從新定義BPMN流程圖的排他網關就好了,idea中的Activiti插件是不用制定默認流程的,只要咱們不設置條件,那就是默認的鏈接線

測試

public class ExclusiveGetWay {
    private ProcessEngine processEngine = ProcessEngines
            .getDefaultProcessEngine();

    // 部署流程定義,資源來在bpmn格式
    @Test
    public void deployProcessDefi() {
        Deployment deploy = processEngine.getRepositoryService()
                .createDeployment().name("排他網關流程")
                .addClasspathResource("ExclusiveGateway.bpmn")
                .deploy();

        System.out.println("部署名稱:" + deploy.getName());
        System.out.println("部署id:" + deploy.getId());
    }

    // 執行流程,開始跑流程
    @Test
    public void startProcess() {
        String processDefiKey = "bankBill";// bpmn 的 process id屬性
        ProcessInstance pi = processEngine.getRuntimeService()
                .startProcessInstanceByKey(processDefiKey);

        System.out.println("流程執行對象的id:" + pi.getId());// Execution 對象
        System.out.println("流程實例的id:" + pi.getProcessInstanceId());// ProcessInstance
                                                                    // 對象
        System.out.println("流程定義的id:" + pi.getProcessDefinitionId());// 默認執行的是最新版本的流程定義
    }

    // 查詢正在運行任務
    @Test
    public void queryTask() {
        // 取得任務服務
        TaskService taskService = processEngine.getTaskService();
        // 建立一個任務查詢對象
        TaskQuery taskQuery = taskService.createTaskQuery();
        // 辦理人的任務列表
        List<Task> list = taskQuery.list();
        // 遍歷任務列表
        if (list != null && list.size() > 0) {
            for (Task task : list) {
                System.out.println("任務的辦理人:" + task.getAssignee());
                System.out.println("任務的id:" + task.getId());
                System.out.println("任務的名稱:" + task.getName());
            }
        }

    }

    // 完成任務
    @Test
    public void compileTask() {
        String taskId = "2404";
        Map<String,Object> params=new HashMap<String, Object>();
        params.put("visitor", 6);
        // taskId:任務id
        processEngine.getTaskService().complete(taskId, params);
// processEngine.getTaskService().complete(taskId);
        System.out.println("當前任務執行完畢");
    }

}

咱們指定的值並非VIP也不是後臺,那麼就會自動去普通窗口中處理

這裏寫圖片描述


並行網關

這裏寫圖片描述

等待活動

這裏寫圖片描述

用戶任務

使用流程變量指定處理人

咱們在快速入門的例子中,是在定義流程圖中硬性指定處理人,其實這麼幹是不夠靈活的,咱們學了流程變量以後,咱們是能夠靈活地指定處理人的….

這裏寫圖片描述

@Test
    public void deployProcessDefi() {
        Deployment deploy = processEngine.getRepositoryService()
                .createDeployment().name("用戶任務指定流程")
                .addClasspathResource("AppayBill.bpmn")
                .deploy();

        System.out.println("部署名稱:" + deploy.getName());
        System.out.println("部署id:" + deploy.getId());
    }

    // 執行流程,開始跑流程
    @Test
    public void startProcess() {
        String processDefiKey = "appayBill";// bpmn 的 process id屬性
        Map<String,Object> params=new HashMap<String, Object>();
        params.put("userID", "王某某");
        ProcessInstance pi = processEngine.getRuntimeService()
                .startProcessInstanceByKey(processDefiKey, params);

        System.out.println("流程執行對象的id:" + pi.getId());// Execution 對象
        System.out.println("流程實例的id:" + pi.getProcessInstanceId());// ProcessInstance
        // 對象
        System.out.println("流程定義的id:" + pi.getProcessDefinitionId());// 默認執行的是最新版本的流程定義
    }

    // 查詢正在運行任務
    @Test
    public void queryTask() {
        String assignee="王某某";//指定任務處理人
        // 取得任務服務
        TaskService taskService = processEngine.getTaskService();
        // 建立一個任務查詢對象
        TaskQuery taskQuery = taskService.createTaskQuery();
        // 辦理人的任務列表
        List<Task> list = taskQuery
                .taskAssignee(assignee)
                .list();
        // 遍歷任務列表
        if (list != null && list.size() > 0) {
            for (Task task : list) {
                System.out.println("任務的辦理人:" + task.getAssignee());
                System.out.println("任務的id:" + task.getId());
                System.out.println("任務的名稱:" + task.getName());
            }
        }

    }

這裏寫圖片描述

使用類指定

這裏寫圖片描述

組任務

直接指定辦理人

這裏寫圖片描述

使用流程變量

這裏寫圖片描述

使用類

這裏寫圖片描述

相關文章
相關標籤/搜索