WF4 0 2 設計工作流

2021-09-06 18:11:06 字數 3055 閱讀 7416

自從做了程式設計師,發現自己長胖了,而且自己的身體抵抗力也出了問題,最近身體不適,公司工作任務最近也很趕,上次寫了wf4.0的簡介,這次就工作中工作流設計的幾種方式稍微總結一下。設計工作流包括四種方式:流程圖工作流,程式工作流,狀態機工作流,自定義命令性**建立工作流.

工作流設計中最常用的就是flowchart,flowchart用於實現非順序的工作流,如果不適用flowdecision節點,flowchart也可以用於順序工作流。首先來看下工具箱提供的流程圖節點:

flowchart 活動是包含從 flownode 繼承的流節點集合的活動,流節點可以包含要執行以及將執行指向其他流節點的子活動。構建流程圖的過程中,可以使用三種元素型別來進行流控制:

flowstep:在流程圖中構建乙個執行步驟的模型;

flowdecision:類似於if的語法,傳入條件可以進行判斷;

flowswitch:類似於switch,可以根據傳入條件判斷;

關於flowdecison建乙個簡單的流程,從流程圖中拖乙個flowdecision,判斷條件為:10==100

這個時候我們可以檢視一下後台生成的**如下(flowswitch類似就不舉例):

程式工作流使用的流控制方法與程式語言中使用的流控制方法類似。這些構造包括 while,dowhile,if....。使用 flowchart和 sequence等其他流控制活動,可以隨意組合這些工作流。

這個就是需要根據具體的業務使用,就不一一舉例~

.net framework 4沒有提供狀態機活動或工作流模型,net framework 4.5中為wf4.0提供了狀態機支援,這裡有 個老外寫的例子,大家可以自己研究一下:

首先看乙個最簡單writeline的輸出:

activity activity = new writeline() ;

workflowinvoker.invoke(activity);

輸出乙個sequence:

activity activity1 = new writeline() ;

activity activity2 = new writeline ;

activity sequence = new sequence() };

workflowinvoker.invoke(sequence);

如果你對上面的**不是很爽,你可以這樣寫:

writeline line1= new writeline() ;

line1.text = "keso";

writeline line2 = new writeline();

line2.text = "flyelephant";

sequence sequence = new sequence();

sequence.activities.add(line1);

sequence.activities.add(line2);

workflowinvoker.invoke(sequence);

下面開始看乙個簡單的小例子,輸出乙個隨機數到控制台:

//定義變數number

variablenumber = new variable;

activity activity = new sequence

,activities = ,

new writeline()}};

workflowinvoker.invoke(activity);

關於取值那一塊需要說明一下的就是去取值需要傳入的值是acitivitycontext,使用lambda表示式進行訪問,lambda不可序列化成xaml格式,這個時候需要換種寫法:

text = new inargument((context) => "隨機數:" + number.get(context))
動態活動

上面通過活動的組合,設定活動的引數和屬性可以是實現**編寫工作流定義,但是唯一的缺憾就是可以繫結現有引數卻沒法將新的引數新增到活動中,定義的引數在儲存為記憶體物件樹的時候是有對應的clr型別,如果新的引數則沒法解析,這個時候可以考慮使用dynamicactivity。

簡單實現兩個整數的乘法:

//定義兩個引數

inargumentnumber1 = new inargument();

inargumentnumber2 = new inargument();

dynamicactivitywf = new dynamicactivity,

new dynamicactivityproperty

},implementation = () => new sequence()

,// 取值

value=new inargument((context)=>number1.get(context)*number2.get(context))}}

}};dictionarywfparams = new dictionary,

};//先給屬性賦值,然後獲取乘積

int result = workflowinvoker.invoke(wf, wfparams);

console.writeline(result);

第二篇先寫到這裡吧,有些東西還是需要有點基礎的,乙個個的寫實在感覺太龐雜,如果週末有空補幾篇稍微基礎一點的使用,你的推薦就是我寫作的最大動力,如果你覺得有所收穫,順手給個贊吧,多謝~

WF4 0 2 設計工作流

自從做了程式設計師,發現自己長胖了,而且自己的身體抵抗力也出了問題,最近身體不適,公司工作任務最近也很趕,上次寫了wf4.0的簡介,這次就工作中工作流設計的幾種方式稍微總結一下。設計工作流包括四種方式 流程圖工作流,程式工作流,狀態機工作流,自定義命令性 建立工作流.工作流設計中最常用的就是flow...

如何設計工作流引擎?

設計工作流就象設計一部汽車 設計乙個好的工作流引擎,就象設計一部汽車,它必須有發動機,提供動力,輪子提供行走,燈提供照明,喇叭提供提示。剎車提供停止,倒擋提供後退出。車門提供鑰匙進入系統,也可以說是安全驗證,導航器提供方向。現在試想一下,我們拿著鑰匙 使用者名稱與密碼 進入汽車 工作流引擎前台操作 ...

工作流學習 WF小結

繼承sequentialworkflowactivity,叫做workflow 實現 executecode 建乙個whileactivity,會自動包含上面的workflow 在console workflowinstance instance workflowruntime.creatework...