activiti6.0源碼剖析之節(jié)點任意跳轉(zhuǎn)

隨著各種業(yè)務(wù)需求的出現(xiàn)筛圆,activiti的一些api或許不滿足與我們的需要卡骂,那么接下來將說明如何進行任意節(jié)點之間的跳轉(zhuǎn)融击,先來說下何為任意節(jié)點的跳轉(zhuǎn)役听。


流程示例.png

比如現(xiàn)在流程已經(jīng)運轉(zhuǎn)到userTask2節(jié)點疆液,那么如果我現(xiàn)在想要流程回到userTask1節(jié)點怎么做呢一铅?

思路

首先從思路上應(yīng)該是處理掉當(dāng)前的節(jié)點(也就是刪除正在運行的該任務(wù),更新維護歷史數(shù)據(jù))堕油,然后將流程的當(dāng)前節(jié)點設(shè)置到userTask1節(jié)點潘飘。那么如何做呢肮之?在這篇文章中(ativiti6.0源碼剖析之流程運轉(zhuǎn)原理)已經(jīng)介紹流程運轉(zhuǎn)的原理。所以大概已經(jīng)很清除應(yīng)該如何做了把卜录。

1戈擒、實現(xiàn)我們自己的命令類,實現(xiàn)execute方法

2艰毒、在實現(xiàn)execute邏輯中找出要跳轉(zhuǎn)任務(wù)節(jié)點所在的執(zhí)行實例筐高,以及跳往的目標節(jié)點

3、通知當(dāng)前的活動節(jié)點結(jié)束丑瞧,并且刪除柑土,然后設(shè)置執(zhí)行實例的當(dāng)前節(jié)點為目標節(jié)點。

4绊汹、往operations棧中壓入ContinueProcessInCompensation操作類稽屏,并且傳入的執(zhí)行實例的當(dāng)前節(jié)點為跳轉(zhuǎn)的目標節(jié)點。

實戰(zhàn)

在部署啟動流程之后西乖,完成第一個用戶任務(wù)狐榔,使得流程運轉(zhuǎn)到第二個用戶任務(wù)節(jié)點,此時數(shù)據(jù)庫情況如下


act_ru_execution.png
act_ru_task.png
act_hi_actinst.png
act_hi_taskinst.png
  • 自定義跳轉(zhuǎn)命令類

public class JumpAnyWhereCmd implements Command {
    private String taskId;

    private String targetNodeId;

    public JumpAnyWhereCmd(String taskId, String targetNodeId) {
        this.taskId = taskId;
        this.targetNodeId = targetNodeId;
    }

    public Object execute(CommandContext commandContext) {
        //獲取任務(wù)實例管理類
        TaskEntityManager taskEntityManager = commandContext.getTaskEntityManager();
        //獲取當(dāng)前任務(wù)實例
        TaskEntity currentTask = taskEntityManager.findById(taskId);

        //獲取當(dāng)前節(jié)點的執(zhí)行實例
        ExecutionEntity execution = currentTask.getExecution();
        String executionId = execution.getId();

        //獲取流程定義id
        String processDefinitionId = execution.getProcessDefinitionId();
        //獲取目標節(jié)點
        Process process = ProcessDefinitionUtil.getProcess(processDefinitionId);
        FlowElement flowElement = process.getFlowElement(targetNodeId);

        //獲取歷史管理
        HistoryManager historyManager = commandContext.getHistoryManager();

        //通知當(dāng)前活動結(jié)束(更新act_hi_actinst)
        historyManager.recordActivityEnd(execution,"jump to userTask1");
        //通知任務(wù)節(jié)點結(jié)束(更新act_hi_taskinst)
        historyManager.recordTaskEnd(taskId,"jump to userTask1");
        //刪除正在執(zhí)行的當(dāng)前任務(wù)
        taskEntityManager.delete(taskId);

        //此時設(shè)置執(zhí)行實例的當(dāng)前活動節(jié)點為目標節(jié)點
        execution.setCurrentFlowElement(flowElement);

        //向operations中壓入繼續(xù)流程的操作類
        commandContext.getAgenda().planContinueProcessOperation(execution);

        return null;
    }
}

調(diào)用命令類

    @Test
    public void testInvokeCommand(){
        processEngine.getManagementService().executeCommand(new JumpAnyWhereCmd("5002","usertask1"));
    }

此時數(shù)據(jù)庫:

act_ru_execution.png
act_ru_task.png
act_hi_actinst.png
act_hi_taskinst.png
此時當(dāng)前流程已經(jīng)完美的從userTask2跳轉(zhuǎn)到了userTask1節(jié)點获雕。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末薄腻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子届案,更是在濱河造成了極大的恐慌庵楷,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萝玷,死亡現(xiàn)場離奇詭異嫁乘,居然都是意外死亡昆婿,警方通過查閱死者的電腦和手機球碉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仓蛆,“玉大人睁冬,你說我怎么就攤上這事】锤恚” “怎么了豆拨?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長能庆。 經(jīng)常有香客問我施禾,道長,這世上最難降的妖魔是什么搁胆? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任弥搞,我火速辦了婚禮邮绿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘攀例。我一直安慰自己船逮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布粤铭。 她就那樣靜靜地躺著挖胃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梆惯。 梳的紋絲不亂的頭發(fā)上酱鸭,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音垛吗,去河邊找鬼凛辣。 笑死,一個胖子當(dāng)著我的面吹牛职烧,可吹牛的內(nèi)容都是我干的扁誓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼蚀之,長吁一口氣:“原來是場噩夢啊……” “哼蝗敢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起足删,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤寿谴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后失受,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讶泰,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年拂到,在試婚紗的時候發(fā)現(xiàn)自己被綠了痪署。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡兄旬,死狀恐怖狼犯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情领铐,我是刑警寧澤悯森,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站绪撵,受9級特大地震影響瓢姻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜音诈,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一幻碱、第九天 我趴在偏房一處隱蔽的房頂上張望续膳。 院中可真熱鬧,春花似錦收班、人聲如沸坟岔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽社付。三九已至,卻和暖如春邻耕,著一層夾襖步出監(jiān)牢的瞬間鸥咖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工兄世, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留啼辣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓御滩,卻偏偏與公主長得像鸥拧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子削解,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容