1. 程式人生 > >Activti跳過中間節點的helloworld例項程式

Activti跳過中間節點的helloworld例項程式

此例項是一個最簡單的在執行時人為動態改變流程運轉的例項,意在為任意流、駁回等功能拋磚引玉.

定義一個最簡單的流程,它只有一個“開始事件”、一個“ServiceTask”、一個“結束事件”.


我們現在的要實現的是直接跳過ServiceTask。

ServiceTask的實現類只是簡單的在控制檯輸出一條語句.

public class Log implements JavaDelegate {

	public void execute(DelegateExecution execution) throws Exception {
		System.err.println("如果我出現了,就說明我沒被忽略");
		
	}
	
}

控制流向的程式碼如下
		
		System.out.println("直接跳過ServiceTask的流程開始..................");
		
		RepositoryService repositoryService = activitiRule.getRepositoryService();
	
		ProcessDefinition processDefinition = 
				repositoryService.createProcessDefinitionQuery().deploymentId("1").singleResult();
		
		ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
				.getDeployedProcessDefinition(processDefinition.getId());
		
		List<ActivityImpl> activities = processDefinitionEntity.getActivities();
		
		ActivityImpl start = null;
		ActivityImpl task = null;
		ActivityImpl end = null;
		
		
		for (ActivityImpl activity : activities) {
			if (activity.getId().equals("startevent1")) {
				start = activity;
			}
			if (activity.getId().equals("usertask1")) {
				task = activity;
			}
			if (activity.getId().equals("endevent1")) {
				end = activity;
			}
		}
		//清除原先的路徑
		List<PvmTransition> cacheTran = start.getOutgoingTransitions();
		start.getOutgoingTransitions().clear();
		//建立新路徑
		TransitionImpl tran = start.createOutgoingTransition();
		tran.setDestination(end);
		
		RuntimeService runtimeService = activitiRule.getRuntimeService();
		runtimeService.startProcessInstanceById(processDefinitionEntity.getProcessDefinition().getId());
		
		//恢復原來路徑
		start.getOutgoingTransitions().clear();
		for (PvmTransition transition : cacheTran) {
			start.createOutgoingTransition().setDestination((ActivityImpl) transition.getDestination());
		}
		
	
這樣ServiceTask將被跳過不會自動執行

當註釋掉

start.getOutgoingTransitions().clear();

serviceTask將被執行.


這種方法只會影響一個流程例項的流程定義的記憶體映象,其他流程不會受到影響.

相關推薦

Activti中間節點helloworld例項程式

此例項是一個最簡單的在執行時人為動態改變流程運轉的例項,意在為任意流、駁回等功能拋磚引玉. 定義一個最簡單的流程,它只有一個“開始事件”、一個“ServiceTask”、一個“結束事件”. 我們現在的要實現的是直接跳過ServiceTask。 ServiceTask的實現

【android】關於多個activity頁面轉,中間頁面返回前邊頁面傳值

這是一個面試中被問到的題目,答得不是很好,後來經過自己敲程式碼嘗試發現了一個解決思路。 我可以把這個問題具體化。比如有一個需求,給你三個頁面A,B,C,要求A可以跳轉到B頁面,並傳值,B可以跳轉到C頁面,並傳值,C頁面直接返回A頁面,並且把C頁面的值直接給A頁

gitlab-ci window下構建Nodejs程式,會npm install後面的其他指令碼

背景 最近在處理一個nodejs的構建程式,因為需要打包為win可執行程式,並且有現成的ci工具可以用,就找了一個window機子作為gitlab-runner註冊到gitlab伺服器上,本地利用node npm 安裝包,起服務測試都沒問題,但是在gitlab-ci伺服器上執行的時候,就

gitlab-ci window下構建Nodejs程式,會npm install後的其他指令碼

背景 最近在處理一個nodejs的構建程式,因為需要打包為win可執行程式,並且有現成的ci工具可以用,就找了一個window機子作為gitlab-runner註冊到gitlab伺服器上,本地利用node npm 安裝包,起服務測試都沒問題,但是在gitlab-

編譯vs2008的程式總是,顯示“未能完成操作 未指定的錯誤”的解決辦法 .

今天想參考一下vs2008的示例程式,就是在這裡 “E:/Program Files/vs2008/Samples/2052/AllVCLanguageSamples/C++/MFC”的程式。 但編譯時總是跳過,還不能除錯,網上有人說要改平臺為win32,但要配置屬性或清

編譯vs2008的samples程式總是

文章轉自王牌軟體----兼職軟體設計,軟體修改,畢業設計 收入主要用於網站建設,歡迎贊助 今天想參考一下vs2008的示例程式,就是在這裡 “E:/Program Files/vs2008/Samples/2052/AllVCLanguageSamples/C++/MFC”的程式。 但編譯時總是跳過,還

java直接生成zip壓縮文件精簡代碼(txt文件)

txt文件 pan cnblogs ace ipo cname exception pre ram /** * @param args */ public static void main(String[] args) throws Excep

android開發裏的坑——button不響應點擊事件

一個 不響應 color 事件 short ces andro generate lis 昨天遇到一個頭疼的問題,在手機上按鈕事件都很正常,但是在平板上(橫屏顯示的狀態),button點擊事件不響應,代碼簡化如下: public class Test extends Ac

Linux centos 管理員密碼進行登錄(單用戶模式、救援模式)

remount 無法 linu 單用戶 blog int 成功 程序 bios   這裏列舉了兩種更改或者取消管理員密碼登錄Linux系統的方法,其實兩種方法類似,都是想方設法跳過用戶認定,直接更改用戶文件、更改密碼的過程。   為了跳過系統正常啟動過程中的某些步驟,必須知

robotframework 判斷下拉框是否存在,如果存在就執行下拉框操作,不存在就執行下拉框操作,進行下一步操作;

新頁面 存在 robot sel log 是否 work val image #本人新手,僅做學習記錄之用 因為工作要求,打開的ui頁面,根據前面篩選的條件不同,跳轉的新頁面不同,本記錄涉及的就是有下拉框和沒有下拉框,所以要對新打開的頁面進行判斷;run keyword

OGG運維優化腳本(四)-信息修改類--長事務

ogg oracle goldengate 腳本 數據同步 shell 文件名: skiptrans.sh skip.sh所在路徑:$HOME/ggscript/ggtrandata功能:該腳本用於重啟抽取進程時跳過長事務,可自動識別1小時以上的長事務並批量跳過,skiptrans.s

丟失歸檔進行恢復

sequence spec sed mine rdb 跳過 ora- value corrupt 在我們恢復的時候,發現中間缺失歸檔,大部分dba覺得從缺失的歸檔開始以後的歸檔都無法進行恢復。可是我們從很規的方式,改動數據文件相應的信息是能夠跳過該缺失的歸檔,而且利

Python單元測試--使用裝飾器實現測試和預期故障

mar 標記 失敗 assertion 可能 -s dev https one Python單元測試unittest中提供了一下四種裝飾器實現測試跳過和預期故障。(使用Python 2.7.13) 請查考Python手冊中: https://docs.python.org

mysql主從復制錯誤

ren class 結果 test mysql gin ack table .cn mysql主從復制,經常會遇到錯誤而導致slave端復制中斷,這個時候一般就需要人工幹預,跳過錯誤才能繼續跳過錯誤有兩種方式:1.跳過指定數量的事務:mysql>slave stop;

#include”* .h“ 在查找預編譯頭使用時

ios warning 跳過 ima stream bsp 分享 strong ges warning C4627: “#include <windows.h>”: 在查找預編譯頭使用時跳過 解決辦法: 原因是沒有在cpp文件

SourceTree 免登錄初始設置

host col red ase atlas 輸入 ide html 新建 http://www.cnblogs.com/xiofee/p/sourcetree_pass_initialization_setup.html 安裝之後,轉到用戶本地文件夾下的 SourceTr

菜鳥幫你openstack配置過程中的坑

如果 working ack 大坑 nbsp 模式 con ror centos 一:前言 對於一個以前做java全棧工程師而言,而且沒學過Linux,很少用虛擬機(還是在大學的時候簡單的用過),去配置openstack我想我入的坑肯定比有基礎的一

快速找到未知長度單鏈表的中間節點

變量 div ride span 一個 ima list 方法 .com 在討論之前,我們首先首先要明白,什麽是單鏈表? 單鏈表:鏈接方式存儲的線性表 單鏈表的結點結構 ┌──┬──┐ │data│next│ └──┴──┘  data域--存放結點值的數

如何使用RDP網絡隔離?

rip mach ogr bce inter debug keyword .bat wid 簡介 本文我將向大家演示,如何通過RDP跳轉盒進入隔離/受保護的網絡。下圖是我為該場景制作的拓撲圖: 簡要說明: LAN是一種扁平的工作站和服務器網絡。 一些服務器(包括RDP跳

算法總結之 刪除鏈表的中間節點和a/b處的節點(鏈表中間節點的重要思想)

math 取整 算法 blog 總結 rem nod == while 給定鏈表的表頭節點head,實現刪除鏈表的中間節點的函數 推展: 給定鏈表的頭節點,整數a 和 整數 b,實現刪除a/b處節點的函數 先來分析原問題, 長度1 直接返回 長度2 將頭節點刪