微軟workflow foundation介紹

林堯彬發表於2020-04-04

一概述

WF是在windows平臺上開發具有工作流功能的應用的 程式設計模型,執行環境和工具

¡Windows平臺上統一的工作流技術
—平臺級的技術
—適用於絕大部分場景

¡對傳統工作流技術的擴充套件
—包括人工活動和系統活動
—靈活的流程控制:順序, 狀態機, 基於規則
 
¡領導新的工作流方向
 —一致和熟悉的模型,開發者容易接受
—強大的合作伙伴和解決方案生態系統  

活動(Activity):工作流由活動組成
活動執行在宿主(Host)程式中:任意應用或者伺服器
使用者自定義活動(Customer Activity Library)
元件
基本活動庫:平臺自帶的活動
執行時引擎:執行工作流,狀態管理
執行時服務:為宿主提供靈活性,管理通訊

定義工作流:

可以用程式碼表達:工作流是一個類

<?Mapping XmlNamespace="Activities" ClrNamespace="System.Workflow.Activities" Assembly="System.Workflow.Activities" ?>

<SequentialWorkflow x:Class="MyWorkflow" xmlns="Activities" xmlns:x="Definition">
    …
</SequentialWorkflow>

二 活動 的概念

活動是工作流中的一個步驟
屬性和事件:使用者用程式碼定製
方法:僅能被執行時引擎呼叫
類比表單和控制元件
活動 == 控制元件
工作流 == 表單
活動可以分成兩類
基本活動 – 原子動作
複合活動 – 管理子活動

 

Activity 是搭建Workflow的積木
一個邏輯執行單元,可重用的部件
基本的Activity是Workflow中的一個步驟
複合的Activity包含其它的Activity,比如: Sequence
基本活動庫(Base Activity Library)包含了一組Activity的集合
第三方將提供更多的Activity,比如: “ApproveOrder”
Activity 是一個類:
Activity的屬性和事件被工作流使用
Activity的方法被Workflow的執行時呼叫 (比如: Execute方法)
Activity可以被編譯到Workflow中,也可以以活動庫的形式單
 獨提供

 

生命週期 Activity
InvokeWorkflow
Suspend
Terminate
事件 Activity
EventDriven
Listen
Delay
HandleExternalEvent

複合活動:

複合活動在所有子活動完成時完成

複合活動負責管理子活動的執行,和子活動的執行模式(順序,條件,迴圈,並行. . .)

通過 IActivityEventListener 偵聽所有子活動的狀態改變(close)

並行執行:

ParallelActivity允許並行執行其子分支
ParallelActivity依次執行每一個分支的第一個Activity
當遇到阻塞時,轉去執行其它的分支
當所有的分支都執行完, ParallelActivity結束

同步執行:

ParallelActivity允許並行執行其子分支
SynchronizationScopeActivity 允許多個並行活動被同步執行
通過同步控制程式碼來管理同步執行

自定義活動:

什麼是自定義活動:

WF為我們提供了一組”內建”活動(Code,While…)

使用者也可以根據建立自己的活動

新的活動可以被用於工作流中

使用者可以自行規定活動的功能,執行邏輯和主體風格

自定義活動可以以元件的方式提供給其它人使用

 為什麼要自定義活動

WF的基本活動很有限

需要更多的活動封裝業務邏輯

減少使用者使用的複雜性

提供更貼近現實的風格

如何自定義活動

從Activity(或其子類)繼承出一個類來

複寫Execute方法

制定新活動對外互動的方式(DependencyProperty等)

為新活動指定風格
ActivityDesigner
 ActivityValidator

 

三工作流形態

工作流三種形態:
順序工作流
狀態機工作流
規則驅動的活動

什麼是狀態機工作流
工作流本身由一組狀態組成。

存在一個初始狀態。

每個狀態都可以接收一組特定事件。

視事件而定,可以轉換到另一個狀態。

狀態機工作流可以有最終狀態。

當對最終狀態進行轉換時,工作流將完成

什麼時候使用狀態機工作流?
影響工作流程的一些重要的選擇是否發生在工作流外部(out of workflow)?

是否由使用者進行控制?

是否發生了“goto” 操作?

為什麼要使用規則驅動的工作流?
順序和狀態機工作流不能滿足複雜的流程需要

工作流執行中需要更改規則

複雜的策略

規則種類:
程式碼規則(Code Condition)
通過一個返回布林值的方法作為規則
規則寫死在程式碼中
規則檔案(Rule Condition)
規則寫在.rules的XML檔案中
執行時可以更改
規則集合(Rule Set)
一個規則的集合
每個規則採用If-Then-Else的方式
可定義優先順序

規則驅動的活動
採用Code Condition和Rule Condition的Activity
IfElseBranch
While
Replicator
ConditionedActivityGroup (CAG)
採用Rule Set的Activity
PolicyActivity

四宿主和執行時間
宿主是WF執行的容器

宿主提供WF執行的底層服務(執行緒,安全)

宿主可以是任意的.NET程式

什麼是WF Runtime
WF Runtime執行在宿主中

WF 例項執行在WF Runtime中

WF Runtime負責WF例項的執行,狀態維護,生命週期等

WF Runtime載入各種服務,完成特定的功能(排程,通訊,持久化等)

一個WF Runtime中可以執行多個WF例項

宿主(Host)
任意.NET程式
Windows SharePoint Services
IIS/ASP host
BizTalk 2006
Dynamics 未來版本
Office 2007
執行時服務
監控服務
持久化服務
其他

轉載於:https://www.cnblogs.com/superch0054/archive/2008/03/24/4010142.html

相關文章