狀態機工作流由一組狀態組成,包含初始狀態與終態。每個狀態接收特定事件,依事件轉換至其他狀態。轉換至終態時工作流完成。
建立轉換:選擇事件驅動活動,拖動手柄至目標狀態。
| 工具箱名稱 | 活動類別 | 說明 |
|---|---|---|
| State | StateActivity | 表示一個狀態,可巢狀包含其他 StateActivity |
| SetState | SetStateActivity | 指定轉換至新狀態 |
| StateInitialization | StateInitializationActivity | 進入狀態時執行 |
| StateFinalization | StateFinalizationActivity | 離開狀態時執行 |
| EventDriven | EventDrivenActivity | 依賴外部事件啟動,第一個子活動必須實作 IEventActivity |
強烈建議開啟「文件大綱」監視邏輯結構(視圖→其他視窗→文件大綱),設計圖面物理配置可能不反映邏輯結構。
MyStateWF。
雙擊 EventDrivenActivity1 進入內部編輯,自動新增 SetState 活動(來自手柄轉換)。第一個子活動必須為延遲活動:
使用 IfElse 分支處理兩種結果:
簡單輸出訊息:
private void LeaveCondition(object sender, ConditionalEventArgs e)
{
System.Threading.Thread.Sleep(5000);
string result = Console.ReadLine();
if (result == "0") e.Result = false;
if (result == "1") e.Result = true;
}
private void codeActivity1_ExecuteCode(object sender, EventArgs e)
{
Console.WriteLine("這是初始狀態,請假流程開始!\n");
System.Threading.Thread.Sleep(5000);
Console.WriteLine("開始提交請假申請\n");
}
private void codeActivity2_ExecuteCode(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000);
Console.WriteLine("收到請假申請,請批示:!\n");
Console.WriteLine("輸入0:不同意請假。\n");
Console.WriteLine("輸入1:同意請假。\n");
}
private void codeActivity5_ExecuteCode(object sender, EventArgs e)
{
Console.WriteLine("請假申請結束!\n");
}
private void codeActivity3_ExecuteCode(object sender, EventArgs e)
{
Console.WriteLine("允許請假!");
}
private void codeActivity4_ExecuteCode(object sender, EventArgs e)
{
Console.WriteLine("不允許請假!");
}
按 F5 執行,輸入 0 循環重新申請,輸入 1 核准結束。
重要:因狀態名稱使用中文,需設定工作流 InitialStateName 屬性為「準備」。
https://zhuxianzhong.blog.51cto.com/157061/203483