在eworkflow自定義工作流產品中,設置條件節點,是在節點的后續連線上設置的。每一個處理節點(除結束節點外)都至少有一條連線連接到下一個節點,當有多條連線連接到其他節點的時候,就需要在多出的連線上設置條件了。多出的每條連線上,都可以設置一個條件,條件返回true或false,true代表條件成立,當流程流轉到此時,條件返回true的,則會走此條連線到達下一個節點。條件設置可以是一個表達式,返回true或false, 也可以是一段自定義的函數,結尾返回true或false。
當流程流轉時,所有條件都不成立,則會走沒有設置條件的那條連線,即無條件結果連線,到達下一個節點。
當一個節點就一條連線連接到下一個節點,則為無條件結果,每次執行完節點的處理后,無條件流轉到結果連線的下一個節點。
當一個節點有多條連線連接到多個后續節點,則就需要在多出的連線上設置條件,讓其中一條連線不設置條件,代表無條件結果連線。當流程流轉的時候,取條件連線上的條件判斷,返回true,則流轉到此連線的下一個節點。當所有條件都不滿足了,則流轉到沒有設置條件的無條件結果連線下一個節點。
有條件結果連線上面的條件設置,可以是一個表達式,返回true或者false,也可以是一個自定義的函數,經過一序列的邏輯判斷運算結果后,得出true或者false.
當條件為一個表達式時,經常需要取節點上操作的業務表單中的數據來做判斷。
如費用報銷單,需要取報銷人填寫的金額來做判斷,報銷金額大於3000元的,需要總經理審核,小於等於3000元的就部門經理審核。
取業務表單中,用戶填寫的關鍵信息,需要在提交時,將這關鍵信息傳遞到流程中,流程在執行條件判斷的時候,就能取到這些值來做判斷。
在eworkflow中,我們常用的方式是,在eform表單中,將需要送入流程中做條件判斷的字段,選擇為 流程用。
在eworkflow流程的節點中,設置節點辦理的eform表單,並設置前置事件,"將數據集中的字段信息保存到流程變量中"。
這樣在設置條件的時候,通過向導引入,就能取到這些用於流程中的關鍵信息了。
導入條件: 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了。
用臨時變量更方便,也不會將變量持久化到數據庫表中。