介面選擇:
osworkflow提供幾種實現com.opensymphony.workflow.workflow介面的類。
basicworkflow:
不提供事務支援,你可以通過持久層來實現事務處理。
workflow wf = new basicworkflow(username)
這裡的username是用來關聯當前請求的使用者。
ejbworkflow:
用ejb容器來管理事務。在ejb-jar.xml中進行配置。
workflow wf = new ejbworkflow()
這裡沒有必要想basicworkflow和ofbizworkflow那樣給出username。因為ejb容器已經校驗過的。
ofbizworkflow:
與basicworkflow比較相似,不同只在於需要事務支援的方法由ofbiz transactionutil calls來包裝。
建立新的工作流例項:
這裡是以basicworkflow為例子
=new
basicworkflow(username);
=new
hashmap();
"doctitle
", request.getparameter(
"title");
"workflowname",
1, inputs);
執行action:
=new
basicworkflow(username);
=new
hashmap();
"doctitle
", request.getparameter(
"title");
long
id =
long.parselong(request.getparameter(
"workflowid");
wf.doaction(id,
1, inputs);
查詢:值得注意的是:並不是所有的 workflow stores支援查詢。當前的hibernate,jdbc和記憶體工作流儲存支援查詢。hibernate儲存不支援mixed-type查詢(如,乙個查詢使用到了歷史和當前step contexts)。為了執行乙個查詢,需要構造出乙個workflowexpressionquery物件。查詢方法是在這個物件上被呼叫的。
簡單查詢、巢狀查詢、mixed-context查詢(不支援hibernate工作流儲存)在docs文件的5.4部分都有。
step
大致相當於流程所在的位置。譬如企業年檢,年檢報告書在企業端算乙個step,在工商局算第二個step,在複核視窗算第三個step。每個step可以有多種狀態(status)和多個動作(action),用workflow.getcurrentsteps()可以獲得所有當前的step(如果有並列流程,則可能同時有多個step,例如一次年檢可能同時位於「初審」step和「廣告經營資格審查」step)。
status
流程在某個step中的狀態。很容易理解,譬如「待認領」、「審核不通過」之類的。osworkflow中的狀態完全是由開發者自定義的,狀態判別純粹是字串比對,靈活性相當強,而且可以把定義檔案做得很好看。
action
導致流程狀態變遷的動作。乙個action典型地由兩部分組成:可以執行此動作的條件(conditions),以及執行此動作的結果(results)。條件可以用beanshell指令碼來判斷,因此具有很大的靈活性,幾乎任何與流程相關的東西都可以用來做判斷。
result
執行動作後的結果。這是個比較重要的概念。result分為兩種,conditional-result和unconditional-result。執行乙個動作之後,首先判斷所有conditional-result的條件是否滿足,滿足則使用該結果;如果沒有任何contidional-result滿足條件,則使用unconditional-result。unconditional-result需要指定兩部分資訊:old-status,表示「當前step的狀態變成什麼」;後續狀態,可能是用step+status指定乙個新狀態,也可能進入split或者join。
conditional-result非常有用。還是以年檢為例,同樣是提交年檢報告書,「未提交」和「被退回」是不同的狀態,在這兩個狀態基礎上執行「提交」動作,結果分別是「初次提交」和「退回之後再次提交」。這時可以考慮在「提交」動作上用conditional-result。
split/join
流程的切分和融合。很簡單的概念,split提供多個result;join則判斷多個current step的狀態,提供乙個result。
C 部分類與部分方法
部分類也可以定義部分方法。部分方法在部分類中定義,但沒有方法體,在另乙個部分類中執行。在這兩個部分類中,都要使用partial關鍵字。public partial class myclass public partial class myclass 部分方法也可以是靜態的,但它們總是私有的,且不能有...
部分類 匿名類
部分類 關鍵字 partial 把乙個類的 拆開幾個部分,每部分在乙個cs檔案,編譯時再合在一起。parclass1.cs partial class circle public circle int initialradius parclass2.cs partial class circle 部...
部分型別轉換
dynamic cast 通常在基類和派生類之間轉換時使用,run time cast。const cast 主要針對const和volatile的轉換。static cast 一般的轉換,no run time check.通常,如果你不知道該用哪個,就用這個。reinterpret cast 用...