在eworkflow自定義工做流產品中,設置條件節點,是在節點的後續連線上設置的。每個處理節點(除結束節點外)都至少有一條連線鏈接到下一個節點,當有多條連線鏈接到其餘節點的時候,就須要在多出的連線上設置條件了。多出的每條連線上,均可以設置一個條件,條件返回true或false,true表明條件成立,當流程流轉到此時,條件返回true的,則會走此條連線到達下一個節點。條件設置能夠是一個表達式,返回true或false, 也能夠是一段自定義的函數,結尾返回true或false。 java
當流程流轉時,全部條件都不成立,則會走沒有設置條件的那條連線,即無條件結果連線,到達下一個節點。數據庫
當一個節點就一條連線鏈接到下一個節點,則爲無條件結果,每次執行完節點的處理後,無條件流轉到結果連線的下一個節點。c#
當一個節點有多條連線鏈接到多個後續節點,則就須要在多出的連線上設置條件,讓其中一條連線不設置條件,表明無條件結果連線。當流程流轉的時候,取條件連線上的條件判斷,返回true,則流轉到此連線的下一個節點。當全部條件都不知足了,則流轉到沒有設置條件的無條件結果連線下一個節點。jsp
有條件結果連線上面的條件設置,能夠是一個表達式,返回true或者false,也能夠是一個自定義的函數,通過一序列的邏輯判斷運算結果後,得出true或者false.函數
當條件爲一個表達式時,常常須要取節點上操做的業務表單中的數據來作判斷。orm
如費用報銷單,須要取報銷人填寫的金額來作判斷,報銷金額大於3000元的,須要總經理審覈,小於等於3000元的就部門經理審覈。blog
取業務表單中,用戶填寫的關鍵信息,須要在提交時,將這關鍵信息傳遞到流程中,流程在執行條件判斷的時候,就能取到這些值來作判斷。事件
在eworkflow中,咱們經常使用的方式是,在eform表單中,將須要送入流程中作條件判斷的字段,選擇爲 流程用。get
在eworkflow流程的節點中,設置節點辦理的eform表單,並設置前置事件,"將數據集中的字段信息保存到流程變量中"。input
這樣在設置條件的時候,經過嚮導引入,就能取到這些用於流程中的關鍵信息了。
導入條件: eworkflow for java版本的,條件表達式用java的語法;
propertySet.getString("dept_audit").equals("0")
eworkflow for dotnet版本,條件表達式用c#的語法:
propertySet.getString("dept_audit").Equals("0")或者propertySet.getString("dept_audit")=="0"
這樣作的結果是,將這些業務處理表單中的關鍵信息,經過前置函數 "將數據集中的字段信息保存到流程變量中" 做爲持久化變量保存到工做流系統中了。持久化變量只要存入了系統,就一直能取到結果,即便流程運行結束了,也會保存在系統中。
若是這些變量只須要一次使用,後續的節點不須要再獲取使用的話,能夠直接作臨時變量,即不設置節點的前置函數 「將數據集中的字段信息保存到流程變量中 」持久化這些變量,只將業務表單中的關鍵信息送到流程流轉中,用於調節判斷,判斷完成後,流轉結束了,變量的值也消失。即臨時變量,僅存在於流程的這一次流轉當中。
用臨時變量作eworkflow條件節點的表達式判斷 eworkflow for java版本,條件表達式用java語法: 字符型的 transientVars{"字段名"}.equals("值") 數字型的 Double.parseDouble(transientVars{"字段名"})>值
eworkflow for dotnet版本,條件表達式用c#語法: 字符型的 transientVars["字段名"].ToString()=="值" 或transientVars["字段名"].ToString().Equals("值") 數字型的 Double.Parse(transientVars["字段名"].ToString())>值
利用臨時變量的方式,簡單方便,不須要設置前置函數"將數據集中的字段信息保存到流程變量中" 注:前置函數「將數據集中的字段信息保存到流程變量中」 這個函數的做用 就是將表單中送入流程中作使用的變量持久化到數據庫表中。
若是節點上不掛接eform自定義的表單,而是直接的jsp或aspx的話,則在準備送入流程中使用的關鍵變量時,就不用準備inputs中的 field_type的map了。
用臨時變量更方便,也不會將變量持久化到數據庫表中。