activiti 7 + springboot2(八) Activiti流程實例動態設置assignee執行人


(一)activiti流程圖用流程變量設置節點執行人

 

Activiti 使用 UEL 表達式, UEL 是 java EE6 規范的一部分, UEL(Unified Expression Language)即統一表達式語言, activiti 支持兩個 UEL 表達式: UEL-value 和 UEL-method。 

<!--UEL-value: user1 是一個流程變量 -->
<userTask activiti:assignee="${user1}" activiti:exclusive="true" id="_3" name="申請人提交申請"/>
 
<!--UEL-method: user 是一個流程變量對象, user1.assignee 表示通過調用 user1 的 getter 方法獲取值  -->
<userTask activiti:assignee="${user1.assignee}" activiti:exclusive="true" id="_3" name="申請人提交申請"/>

 

(二)方法調用賦值

${userService.findUserById(userId)}

userService 是 spring 容器的一個 bean, findUserById 是該 bean 的一個方法, userId 是流程變量。

 

(三)監聽器分配

任務監聽器是發生對應的任務相關事件時執行自定義java邏輯或表達式。

 

Create:任務創建后觸發
Assignment:任務分配后觸發
Delete:任務完成后觸發
All:所有事件發生都觸發

定義任務監聽類,且類必須實現org.activiti.engine.delegate.TaskListener接口

  

package com.activiti.example;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

public class MyTaskListener  implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
        delegateTask.setAssignee("滅霸");
    }
}

 

(四)程序中動態指定任務實例執行人代碼

    /**
     * 啟動一個實例,動態設置設置assignee
     */
    @Test
    public void startProcessInstance() {
        //設置assignee,map鍵對應配置中的變量名
        Map<String,Object> map=new HashMap<>();
        map.put("user1","張三");
        map.put("user2","李四");
        map.put("user3","王五");

        //啟動流程實例,同時還要設置流程定義的assignee的值
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess_1", map);
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM