Activiti 6.0 之SkipExpression


Activiti 6.0 之SkipExpression

慚愧慚愧,這么一個小小的功能整了這么久。

​ 還是先說一下業務場景吧。在工作流中,我們難免會遇到這樣的情況,即一個流程的發起者的身份問題。舉個詳細的例子。就拿一個公司的報銷流程來講。可能是這樣的。

  1. 沒有優化過的流程圖(實在不想畫了,太費勁了)

    沒有優化過的流程圖

  2. 優化過的流程圖

    優化過的流程圖

    ​ 怎么樣?看起來是不是清爽了很多?那怎么執行呢?首先,這篇說的是SkipExpression,所以審批不通過的駁回不在這篇說。


  1. 流程啟動之后,第一個任務節點就是發起任務的節點。

  2. 在后續任務中加入一個跳過表達式,比如說代表當前用戶的職責組編號:${execution.getVariable('gId')==2}

    Skip 使用圖解

    之后就可以部署流程圖了。在任務進行的途中將當前處理人的身份組ID以流程變量的形式設置進流程,這樣就可以做到任務執行到當前任務時自動跳過任務了。嗯。理想是美好的,現實是骨感的,WTF!!!Skip Expression竟然沒有工作????

Question:Skip Expression 設置了但是沒有起作用

​ 哎,上面的想法是好的,因為看到了Skip Expression,顧名思義,就是跳過表達式的意思嘛,怎么就不起作用呢?好在在github中下載了一份源碼來看。

​ 在源碼的測試方法中可以看到在設置流程變量前先設置了一個這東西:_ACTIVITI_SKIP_EXPRESSION_ENABLED

設置開啟流程跳過表達式功能

​ 什么玩意???Activiti 跳過 表達式 開啟?咦,英語還湊合哈,對就是啟用跳過表達式模式。那么問題又來了。怎么呢??這么多的任務節點,你讓我每次都去加這么一句流程變量么??!!鬧呢??別急,我是這樣做的。

給第一個需要跳過的任務中也添加一個ExecutionListener

import com.edu.hart.modules.constant.ActivitiConstanct;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;

import java.util.Map;

/**
 * 任務跳過監聽器
 * <p>
 * create by 葉雲軒 at 2017/12/26 - 16:03
 * contact by ycountjavaxuan@outlook.com
 */
public class SkipListenner implements ExecutionListener {

    /**
     * 序列化
     */
    private static final long serialVersionUID = 3599293834301636975L;


    @Override
    public void notify(DelegateExecution execution) {
        // 獲取流程變量
        Map<String, Object> variables = execution.getVariables();
        // 開啟支持跳過表達式 ActivitiConstanct.getSkipExpression()就是"_ACTIVITI_SKIP_EXPRESSION_ENABLED"
        variables.put(ActivitiConstanct.getSkipExpression(), true);
        // 將修改同步到流程中
        execution.setTransientVariables(variables);
        // 這種方式也行。直接設置流程變量
        // execution.setVariable(ActivitiConstanct.getSkipExpression(),true);
    }
}

之后在process的properties中設置Listeners

設置Listeners

這樣就可以了,親測可行的哦~~~~


總結:

1. 看源碼不認真,注意到_ACTIVITI_SKIP_EXPRESSION_ENABLED了但是沒有用,就去測試了。最后結果不行,又來看源碼。浪費時間。
2. Activiti還是很好用的~~~~
3. 下章寫駁回的實現邏輯,完成任意節點的駁回,即去掉所有的審批網關。精簡設計和開發。


免責聲明!

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



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