首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

工作流程式設計漸進指南(五):狀態機工作流完整實作

     編輯:關於C#

一、狀態機工作流簡介

狀態機工作流由一組狀態組成,包含初始狀態與終態。每個狀態接收特定事件,依事件轉換至其他狀態。轉換至終態時工作流完成。

設計器視圖

  • 狀態視圖:顯示狀態活動與內含的事件驅動活動,狀態間轉換以直線連接。
  • 事件驅動視圖:雙擊事件驅動活動進入,類似循序工作流設計器,可編輯內部活動流程。

建立轉換:選擇事件驅動活動,拖動手柄至目標狀態。

狀態視圖建立轉換前 狀態視圖建立轉換後

核心活動類型

工具箱名稱活動類別說明
StateStateActivity表示一個狀態,可巢狀包含其他 StateActivity
SetStateSetStateActivity指定轉換至新狀態
StateInitializationStateInitializationActivity進入狀態時執行
StateFinalizationStateFinalizationActivity離開狀態時執行
EventDrivenEventDrivenActivity依賴外部事件啟動,第一個子活動必須實作 IEventActivity

文件大綱視窗

強烈建議開啟「文件大綱」監視邏輯結構(視圖→其他視窗→文件大綱),設計圖面物理配置可能不反映邏輯結構。

文件大綱與狀態工作流對照

二、建立控制台狀態工作流專案

  1. VS2008 → 檔案→新增專案→控制台狀態機工作流,命名 MyStateWF。
  2. 新增專案對話框
  3. 系統自動開啟工作流設計器。
  4. 初始設計器

三、設計請假流程狀態機

  1. 拖入四個 State 活動。
  2. 四個 State 活動
  3. 前三個 State 拖入 EventDriven 活動(最後一個為終態不需)。
  4. 加入 EventDriven
  5. 建立狀態轉換關係(拖動手柄法)。
  6. 完成轉換關係

狀態 1:審批準備

雙擊 EventDrivenActivity1 進入內部編輯,自動新增 SetState 活動(來自手柄轉換)。第一個子活動必須為延遲活動:

狀態1內部活動 修改為延遲活動

狀態 2:審批決策(核准/駁回)

使用 IfElse 分支處理兩種結果:

狀態2 IfElse 分支

狀態 3:流程結束

簡單輸出訊息:

狀態3 結束活動

四、活動參數與程式碼實作

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;
}

各 Code 活動 ExecuteCode 方法

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 屬性為「準備」。

設定 InitialStateName

出處

https://zhuxianzhong.blog.51cto.com/157061/203483

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved