OSWorkFlow深入淺出(4)---猶抱琵琶半遮面

經過前面幾節的描述,我們基本上讓第一個工作流運行起來了,但是很多人肯定都雲裏霧裏的,配置文件爲什麼要這麼些,doAction之流到底有什麼用,有這些疑問在正常不過了,初次接觸肯定會遇到諸如此類的問題,或許更有甚者,沒關係,只要你有耐心閱讀,那麼我也會耐心的去寫(誰怕誰啊!)

1、工作流程

我們爲什麼要定義helloworld.xml那樣的文件,先來說說他所代表的意思吧,看看下面的這張活動圖,然後我們在對照着進行解釋。

2、詳細解釋

2.1、初始化節點

回顧一下helloworld.xml文件吧,再對照上面的狀態圖,其中initial-actions節點中的action代表需要初始化的動作,當一個工作流調用init方法的時候,其中inital-actions中的action將會被執行解析。

<initial-actions>
		<action id="100" name="Start Workflow">
			<results>
				<unconditional-result old-status="Finished"	status="Underway" step="1"/>
			</results>
		</action>
	</initial-actions>
上面定義了一個action,並且是在initial時被執行的,在osworkflow中有一個規定,必須至少有一個action子節點在initial-actions中,因爲每一個流程都必須進行初始化操作。初始化的時候或許會發生很多悽美的故事,再來說說action,我們定義了他的id是100,它代表action的序列號,而name屬性則可以隨便起,但是建議起一個能知其意的名字。

osworkflow工作流的流轉是需要靠結果進行流轉的,因此在action中我們定義了一個results節點,爲什麼是複數呢?意味着可以有多個result結果,但是必須有一個無條件的結果unconditional-result節點,當有條件的結果都不滿足的時候或者沒有有條件的結果的時候,無條件結果就會默認被執行(有條件結果集,我們會在後文中講解),再來看看step屬性(old-status和status屬性,在後文中介紹),他表示執行完初始化之後,工作流流轉到那個步驟,好了再來對照一下剛纔的測試代碼,其中是不是有一個init方法。

long id = wf.initialize("first", 100, Collections.EMPTY_MAP);
他就代表在workflow初始化的時候執行action中規定的動作。
2.2、步驟節點

步驟節點是osworkflow中最重要的概念之一,他是工作流的靈魂所在,對照着上面的狀態圖以及我們的配置文件,我們來看一下,在osworkflow中,步驟代表一下個流程的流轉節點,在osworkflow中至少需要有一個step節點。

	<steps>
		<step id="1" name="HELLOWORLD1">
			<actions>
				<action id="1" name="helloWorld action1">
					<results>
						<unconditional-result old-status="Finished"
							status="UnderWay" step="2" />
					</results>
				</action>
			</actions>
		</step>
		<step id="2" name="HELLOWORLD2">
			<actions>
				<action id="2" name="helloWorld action2" finish="true">
					<results>
						<unconditional-result old-status="Finished"
							status="UnderWay" step="-1" />
					</results>
				</action>
			</actions>
		</step>
	</steps>

當初始化完成之後,step指到了step=1這個位置,也就是說目前可執行的step只有1,因此我們運行了下面的代碼

wf.doAction(id, 1, Collections.EMPTY_MAP);
當執行完step1的action1之後,result節點有指向了step2節點,我們顯示的調用了

wf.doAction(id, 2, Collections.EMPTY_MAP);
這個時候step2的action2順理成章的被執行了,但是在action2中多了一個屬性那就是finish=true,表示執行到該步驟之後,整個工作流完全執行結束。
讀者閱讀到這裏之後,想必osworkflow有了一個大體的認識,但是肯定存在很多疑問,沒有關係,帶着你的疑問,繼續閱讀接下來的文章,這也是爲什麼標題取名爲“猶抱琵琶半遮面”的原因。

發佈了32 篇原創文章 · 獲贊 21 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章