适用于:
- Microsoft Windows SharePoint Services(版本 3)
- Microsoft Office SharePoint Server 2007
摘要:關于 Microsoft Windows SharePoint Services(版本 3)如何實作 Windows Workflow Foundation 的工作流功能及 Microsoft Office SharePoint Server 2007 如何利用對稱的 Microsoft Office InfoPath 2007 窗體來擴充這些功能的進階概述。
本頁内容

工作流簡介

工作流體系結構

工作流類型

工作流組成

工作流标記

Windows SharePoint Services 和 SharePoint Server 2007 中的工作流

編寫 SharePoint 工作流

在 Visual Studio 2005 中編寫 SharePoint 工作流

在 SharePoint Designer 2007 中編寫 SharePoint 工作流

比較 Visual Studio 2005 Designer for Windows Workflow Foundation 和 SharePoint Designer 2007

Windows SharePoint Services 中的工作流結構

使用工作流命名空間

結論

其他資源
工作流簡介
Microsoft Windows SharePoint Services 為使用者提供穩健和可自定義的工作環境,以建立、協作和存儲重要的業務資訊。如今,利用 Microsoft Windows SharePoint Services(版本 3)和 Microsoft Office SharePoint Server 2007,可将自定義的業務程序附加于文檔或清單項目。
可以使用工作流來展現這些自定義業務流程。工作流是組織并運作一組工作單元或活動的自然方式,用來構成工作流程的可執行表示。該流程幾乎可以控制 Windows SharePoint Services 中項目的任何方面,包括項目的生命周期。工作流的靈活性極佳,可以模仿完成工作流所必需的系統功能和人員操作。
可以根據業務流程所需建立簡單或複雜的工作流。可以建立使用者啟動的工作流,也可以建立 Windows SharePoint Services 根據某些事件(如建立或更改項目時)而自動啟動的工作流。
假定您需要建立一個簡單的工作流,将文檔釋出給一系列使用者進行準許或備注。該工作流将包含系統需要執行的操作并為使用者提供與工作流按指定方式進行互動的界面。例如,在準備檢查文檔時 Windows SharePoint Services 将發送一封電子郵件消息給所選的使用者。這些使用者在完成檢查之後必須可以通知 Windows SharePoint Services,或者輸入一些備注。使用包含在 Windows SharePoint Services V3 中并在 SharePoint Server 2007 中得到擴充的工作流架構,您可以模仿如此複雜的工作流程序并将其以一種簡單易懂且便于接受的方式呈現給終端使用者,指導他們完成每一步流程。
本文提供了工作流的進階概述,這些工作流在 Windows SharePoint Services 中得以實作并在 SharePoint Server 中得到擴充。本文讨論了開發人員在兩種環境中建立工作流時可以使用的工具,以及這些工具各自的功能和優勢所在。
傳回頁首
工作流體系結構
在 Windows SharePoint Services V3 中的工作流功能建構于 Windows Workflow Foundation (WF) 之上,它是一種 Microsoft Windows 平台元件,為開發和執行基于工作流的應用程式提供程式設計基礎結構和工具。WF 簡化了異步程式設計的程序,以建立有狀态、長時間運作及持久的工作流應用程式。WF 運作時引擎會管理工作流的執行,使工作流長時間保持活動狀态,甚至在重新啟動計算機時也不會受到影響。運作時服務提供了事務和持久性等功能,以适時而正确地管理錯誤。
WF 運作時引擎提供每一工作流應用程式所需的服務,例如排序、狀态管理、跟蹤功能及事務支援等。WF 運作時引擎可用作狀态機,負責加載和解除安裝工作流以及管理所運作的任何工作流的目前狀态。WF 允許任何應用程式程序或服務容器通過托管 WF(即,在其程序内部加載 WF)來運作工作流。
Windows SharePoint Services 托管 WF 運作時引擎。使用 WF 代替所包含的可插拔服務,Windows SharePoint Services 為引擎提供了以下服務的自定義實作:事務、持久性、通知、角色、跟蹤和消息傳送。然後,開發人員即可建立在 Windows SharePoint Services 内部運作的工作流解決方案。
圖 1 顯示了 Windows SharePoint Services 中的工作流體系結構。Windows SharePoint Services 在其程序内部托管 WF 運作時引擎,并提供必要服務的自定義實作。WF 運作時引擎的功能以及 Windows SharePoint Services 提供的托管功能,通過 Windows SharePoint Services 對象模型得以實作。
圖 1. Windows SharePoint Services V3 中的工作流體系結構
Windows Workflow Foundation 還提供了 Visual Studio 2005 Designer for Windows Workflow Foundation,它是一種在 Microsoft Visual Studio 2005 開發系統内部托管的附加元件,開發人員可用其建立自己的自定義工作流和工作流活動。有關詳細資訊,請參閱在 Visual Studio 2005 中編寫 SharePoint 工作流。
SharePoint Server 借用了 Windows SharePoint Services(版本 3)中的工作流功能,并通過與 InfoPath 窗體和其他工作流活動相內建而擴充了該功能。在 SharePoint Designer 2007 中編寫 SharePoint 工作流對此做了更為詳細的論述。
Windows Workflow Foundation 運作時引擎作為 Microsoft Windows Workflow Foundation Runtime Components Beta 2.2 and Visual Studio 2005 Extensions for Windows Workflow Foundation Beta 2.2(英文)的一部分,可從 Microsoft 下載下傳中心獲得。此下載下傳還包含 Visual Studio 2005 Designer for Windows Workflow Foundation 以及 Windows Workflow Foundation Software Development Kit (SDK)。
既然已經對 Windows SharePoint Services 中所提供的工作流基礎結構做了簡短描述,接下來讓我們開始研究 WF 工作流自身的内部組成和結構。之後,我們将要看看 Microsoft 為開發人員建立 Windows SharePoint Services 和 SharePoint Server 2007 的工作流解決方案所提供的各種工具。
工作流持久性
Windows SharePoint Services 向 WF 工作流引擎所提供的一個最重要服務是持久性。包含人員互動的工作流必須可以長時間運作;即使在理想的環境下,與計算機相比人們也需要相對較長的時間才能完成工作。在許多 Microsoft Office 方案中,如果不是很長工作流,一般需要幾天的時間。以釋出供準許的文檔的工作流為例。準許人可能需要幾天的時間來檢查文檔。
很明顯,在其執行的整個持續時間内将每一個運作中的工作流均保留在記憶體中是不切實際的;不斷累積的長時間運作工作流所需的資源很快就會使系統停止。
是以,在工作流執行個體到達等待使用者輸入的時候,Windows SharePoint Services 會從記憶體中解除安裝該工作流執行個體而保留其資料。然後,在某一合适的事件(如使用者輸入資料)需要工作流執行個體再次啟動時,Windows SharePoint Services 會使用所保留的資料重新建立工作流執行個體,是以工作流執行個體可根據需要接收和處理事件。
盡管在某任意時刻可能有大量工作流執行個體在運作,但其中隻有一小部分可能存在于記憶體中并使用系統資源。
傳回頁首
工作流類型
Windows Workflow Foundation 支援兩種基本的工作流類型:
- 順序工作流 将工作流顯示為一系列按順序執行的步驟,直到最後一個活動完成。不過,順序工作流不會完全遵照它們的執行順序。因為它們可以接收外部事件且包含并行邏輯流,是以活動執行的準确順序可能會有所變化。
- 狀态機工作流 顯示一組狀态、轉換和操作。将某狀态表示為開始狀态,然後根據某一事件進行某種轉換,使其成為另一種狀态。狀态機可具有确定工作流結束的最終狀态。
可以為 Windows SharePoint Services 和 SharePoint Server 建立任一類型的工作流。
順序工作流
順序工作流可以用圖形的方式很好地表示為操作流程圖:有開始、結束和從開始至結束的順序流方向。順序工作流可以合并諸如重複、循環和并行分支這樣的流結構,但最終還是按照從開始操作至結束操作來前進的。
例如,假定您要制定一張簡單的工作流圖表,該工作流在 Windows SharePoint Services 中分布供準許的文檔。在工作流開始時,系統會通過電子郵件消息通知特定的檢查人員有一個文檔要進行檢查。檢查人員會檢查該文檔并通知系統任務已完成,無論該人員準許還是拒絕文檔。根據檢查人員的響應,工作流會執行兩個并行分支中的一個。如果檢查人員準許文檔,則系統會将準許文檔移動至一特定的 SharePoint 文檔庫,然後發送一條電子郵件消息給整個團隊,通知他們此準許文檔。如果檢查人員拒絕此文檔,則系統會通知文檔作者。無論哪種情況,工作流都會到達其結尾并停止。圖 2 顯示了此工作流。
圖 2. 順序工作流的概念圖表
狀态機工作流
與順序工作流不同,狀态機工作流沒有預定的執行流,也不需要結束。相反,狀态機工作流可定義項目可能具有的任意數量狀态,還可定義将項目從一種狀态轉換至另一種狀态的任意數量事件。
圖 3 顯示了一個簡單的文檔釋出程序,采用狀态機工作流模組化。建立文檔時工作流啟動,文檔狀态設定為完成時結束。不過,在這期間,文檔不會按預定的路徑進行,而是根據事件的發生在各狀态間進行轉換。
狀态機工作流由狀态活動構成。每個狀态活動表示一種項目的狀态。每個狀态活動均可包含可選的狀态初始化、狀态定案和一個或多個事件處理程式。每個事件處理程式活動可處理一個事件。在響應所處理的事件時,某程序處理可能完成,是以可轉換到另一狀态。
圖 3. 狀态機工作流的概念圖表
順序工作流和狀态機工作流的一個共同特點是每種類型的工作流均可以打斷為離散操作(即,一部分操作由系統執行,一部分操作由使用者執行)的集合。可以認為這些操作是工作流的建構塊。在 WF 工作流中,這些操作稱為活動。。
傳回頁首
工作流組成
早期定義的工作流作為組織并運作一組工作單元或活動的方式用來構成工作流程的可執行表示。是以,每個 WF 工作流由一組相關活動構成。在 Windows Workflow Foundation 中,活動是模組化、程式設計、重用和執行的基本單元。活動可由系統或使用者來執行。例如,系統可以向某人發送電子郵件消息作為警告;或某人可以準許文檔的分發。
從概念上說,我們連續的工作流示例包括 5 個活動:
- 發送電子郵件消息來通知準許人
- 準許或拒絕文檔
- 将文檔移動到“經準許的”文檔庫
- 發送電子郵件消息來通知團隊
- 發送電子郵件消息來通知文檔作者
活動還可表示定義工作流範圍并控制工作流的執行流的邏輯控制結構,與代碼邏輯控制(如,If Then 和 Do While 循環)十分類似,能夠控制代碼中的程式流。
活動可以具有屬性、方法和事件。簡單活動執行工作的單一單元,如“延時 1 天”或“調用 Web 服務”。複合活動包含其他活動;例如,帶有兩個分支的條件。還可以向活動附加處理程式,如,錯誤或補償處理程式。特别建議将其用于複合活動。
實際上,工作流本身就是一個複合活動,其包含了工作流中的所有其他活動。
是以,可将工作流視為作為描述實際過程的模型存儲的一組活動。工作從開始到結束周遊該模型,活動可由人或系統功能執行。工作流提供了一種方式來描述執行順序以及多個短時運作工作或長時運作工作之間的依賴關系。
Windows Workflow Foundation 包括若幹預定義的活動,可用于您的工作流,您也可以建立自己的自定義活動。Windows SharePoint Services 工作流項目模闆包包含了大量的活動,明确設計用于 Windows SharePoint Services 環境。此模闆包還包含針對 Windows SharePoint Services 對象模型進行程式設計所必須的參考。類似地,對 SharePoint Server 項目模闆包進行自定義,以用于 SharePoint Server 環境。有關詳細資訊,請參閱在 Visual Studio 2005 中編寫 SharePoint 工作流。
傳回頁首
工作流标記
每個 WF 工作流可由以下檔案的組合來表示:
- 包括工作流的聲明性中繼資料的 XML 檔案或标記檔案
- 與包含表示工作流屬性和行為的自定義代碼的 code-behind 檔案結合使用的标記檔案
- 包括工作流的聲明性邏輯和行為的代碼檔案
标記檔案以可擴充應用程式标記語言 (XAML) 編寫而成,該語言具有檔案必須遵守的已釋出架構,且考慮到了 .xoml 檔案擴充。
因為 XAML 具有已釋出的架構,是以可以選擇使用任何文本編輯器或 XML 編輯器建立 XAML 檔案。不過,本文章中所讨論的兩個工作流編寫工具 Visual Studio 2005 Designer for Windows Workflow Foundation 和 Microsoft Office SharePoint Designer 2007 為開發人員提供了圖形界面,可在其中建立工作流并自動生成合适的标記檔案。
開發人員可以從工作流中包括的業務邏輯中選擇內建或分離其聲明性中繼資料。從概念上說,WF 工作流使用的“代碼分離”模式與 Microsoft ASP.NET 中所使用的類似:聲明性中繼資料與封裝業務邏輯的檔案分離。是以,盡管标記檔案包含用于工作流中所包括的活動的中繼資料,這些活動的屬性和行為仍在分離的檔案中詳細列出。
對于使用代碼分離編寫的工作流,資訊如之前所述仍儲存在标記檔案中,且以如下兩種檔案類型之一儲存:
- 包含封裝業務邏輯的代碼的 code-beside 檔案。該檔案可以 Microsoft Visual C# 或 Microsoft Visual Basic .NET 進行編寫。
- 以聲明性規則而非代碼封裝業務邏輯的工作流規則檔案。
以此方式建立的每個工作流實際是一個唯一的 Microsoft .NET 類型,構造于兩個局部類,這兩個類以 XOML 和 code-behind 或規則檔案進行表示。對工作流項目進行編譯後,這兩個局部類被結合到 .NET 程式集中。以上即為通過使用 Visual Studio 2005 Designer for Windows Workflow Foundation 為 Windows SharePoint Services 或 SharePoint Server 編寫工作流時所采用的方法。
僅由代碼檔案組成的工作流遵守相同的正常編譯過程,即,代碼檔案被編譯到 .NET 類型中。
此外,還可編譯僅由标記檔案組成的工作流。但這不是必要的;WF 運作時引擎可加載并運作未編譯的标記工作流。以上即為通過使用 SharePoint Designer 2007 為 Windows SharePoint Services 或 SharePoint Server 編寫工作流時所采用的方法。
傳回頁首
Windows SharePoint Services 和 SharePoint Server 2007 中的工作流
迄今為止,我們已讨論了實作 Windows Workflow Foundation 的任何應用程式的工作流屬性。現在,讓我們深入研究專門在 Windows SharePoint Services 中實作的工作流并讨論該實作的某些重要方面。
工作流模闆和執行個體
在 Windows SharePoint Services 中,站點或清單上提供的工作流稱為工作流模闆;實際運作于特定 SharePoint 項目上的工作流稱為工作流執行個體。是以,在給定的清單上,同一工作流模闆的多個執行個體可以同時運作,每個執行個體運作在不同的 SharePoint 項目上。每次,可以有多個工作流運作在給定的 SharePoint 項目上。
可以在文檔或清單項上運作工作流。可以通過稱為“關聯”的過程使工作流模闆在站點上可用,本文章稍後将進行讨論。
使用窗體來啟用使用者與 Windows SharePoint Services 的互動
盡管可以使用 Windows SharePoint Services 工作流模組化任意數量的唯一業務流程,但仍提供了多個公共階段,其中使用者可以與工作流模闆或執行個體互動。
為了使使用者向工作流傳遞資訊,開發人員必須通過使用窗體為此互動提供一個接口。向工作流添加窗體将使得工作流更加動态、靈活。窗體使您能夠在工作流生命周期的預定義時間從使用者收集資訊,并使使用者能夠與針對該工作流的任務互動。
從技術上說,可以将任何窗體技術用于 WF 工作流,隻要窗體能夠執行以下操作:
- 調用 Windows SharePoint Services 對象模型
- 生成發送到 Windows SharePoint Services 對象模型所需的資料
- 接收并分析來自 Windows SharePoint Services 對象模型的所需資料
任何在加載中傳遞給窗體的資訊均轉換為字元串,因為使用者送出窗體時,窗體必須将該資料傳遞回 Windows SharePoint Services V3 對象模型。盡管該字元串通常為 XML,但仍可以使用任何可轉換為字元串的資料格式,隻要窗體能夠生成該格式的字元串并分析其收到的字元串。
Windows SharePoint Services 支援使用 ASP.NET 2.0 窗體。如何實作這些窗體将取決于開發人員所使用的工作流編寫工具,即 Visual Studio 2005 Designer for Windows Workflow Foundation 或 SharePoint Designer 2007。此外,SharePoint Server 2007 使得開發人員能夠将 Microsoft Office InfoPath 窗體與其工作流進行內建。這些 InfoPath 窗體可以在 Microsoft Office 用戶端應用程式(例如 Microsoft Office Word、Microsoft Office PowerPoint、Microsoft Office Excel 和 InfoPath)以及用戶端浏覽器内進行托管,并提供了更豐富的用戶端體驗。有關每個工作流編寫工具如何實作工作流窗體的詳細資訊,請參閱 Windows SharePoint Services 工作流中的 ASP.NET 窗體、SharePoint Server 工作流中的 InfoPath 窗體和 SharePoint Designer 工作流中的 ASP.NET 窗體。
無論使用何種窗體技術,每個窗體的概念操作均相同。Windows SharePoint Services 在工作流的合适結合點向使用者顯示窗體。使用者輸入資訊并送出窗體。
作為工作流開發人員,您有責任對使用者送出窗體後将發生的情況進行程式設計處理。多數情況下,窗體會調用 Windows SharePoint Services 對象模型并調用合适的方法來向正确的工作流執行個體傳遞窗體資訊。
如果對窗體和工作流活動進行程式設計以分析該字元串,資訊字元串可以是任何格式。多數情況下,開發人員可能會選擇使用 XML。
Windows SharePoint Services 将字元串資訊傳遞給 WF 運作時引擎、工作流執行個體,最終傳遞給工作流執行個體内的正确活動。活動接收到資訊後會按程式設計預定的方式響應。圖 4 顯示了窗體內建工作流的方式。
圖 4. 窗體內建工作流
Windows SharePoint Services 工作流中使用了如下三種類型的窗體:
- 關聯和初始化窗體 關聯和初始化窗體為使用者在任何工作流實際啟動之前進行填充而顯示。通過這些窗體使用者可以在工作流啟動前設定工作流的參數和其他資訊。
- 修改窗體 修改窗體為提供給使用者的可選項,以在工作流運作在某項目上時對其進行更改。随後可以建立修改窗體使使用者能夠指定修改的參數。
- 任務窗體 基于工作流任務類型,還可以在您的工作流中為任務指定自定義窗體。Windows SharePoint Services 中的每個工作流任務類型均配置設定了一個内容類型;内容類型定義确定了是否為給定的工作流任務類型指定自定義窗體。
上述三種類型的窗體表示預定義階段,其中使用者可以與工作流進行互動。接下來我們将讨論這些階段。
使用者與工作流互動的要點
讓我們深入研究一下各個階段,其中使用者可以與 Windows SharePoint Services 和 SharePoint Server 中的工作流進行互動。
關聯
站點管理者在特定文檔庫、清單或内容類型上提供了工作流模闆時将發生關聯。在此階段,站點管理者為特定文檔庫、清單或内容類型自定義工作流,方法為指定以下參數資訊:
- 工作流的唯一名稱
- 工作流應用于給定項目的方式:建立或更改項目時為自動,或為手動;可啟動工作流的角色,如管理者或參與者
- 工作流在其中建立任務的任務清單
- 工作流在其中存儲由工作流定義的曆史事件的曆史清單
此外,工作流開發人員使得網站管理者能夠通過設定針對特定工作流的參數資訊來進一步自定義工作流。該管理者可能需要為工作流指定參數、預設值及其他資訊,以便工作流适用于管理者将其關聯的清單、庫或内容類型上的項目。
關聯工作流實際發生在工作流自身的外部;關聯期間實際上沒有啟動任何工作流執行個體。而是,Windows SharePoint Services 将關聯資訊存儲在專門的内部工作流關聯表格中。然後,在工作流執行個體實際啟動時,Windows SharePoint Services 使用關聯資料(以及初始化資料,如果有)來設定新工作流執行個體的參數。
初始化
關聯處理适用于特定清單、庫或内容類型的工作流,而初始化處理适用于特定 SharePoint 項目的工作流。
使用者在特定項目上實際啟動工作流執行個體後,發生初始化。必要時,使用者提供該項目上的特定工作流的自定義資訊,然後啟動工作流。
工作流開發人員可使用初始化使得使用者可以覆寫或附加管理者設定的關聯參數,或指定其他有關适用于給定的 SharePoint 項目的工作流的參數或資訊。并非所有工作流均需要初始化。實際上,設定為自動啟動的工作流不能包含初始化參數。
用于 Visual Studio 2005 Designer for Windows Workflow Foundation 的 Windows SharePoint Services 工作流項目包括一個活動,該活動作為初始化工作流時的事件處理程式。該活動是任何 Windows SharePoint Services 工作流中的首個活動。
修改
修改使得使用者可以改變正在運作的工作流執行個體的參數或流程。作為開發人員,您可以在工作流中設定多個點,通過它們使得使用者可以在工作流運作在項目上時,對其進行修改。例如,您可能希望使得使用者可以為其他人配置設定任務,或者甚至可以向工作流添加特定任務。為使用者提供的以在工作流運作在某項目上時對其進行更改的選項稱為修改。
用于 Visual Studio 2005 Designer for Windows Workflow Foundation 的 Windows SharePoint Services 工作流項目包括一個啟用工作流修改的活動,以及一個啟用工作流修改時作為事件處理程式的活動。
任務
由使用者所執行的工作流活動表示為 Windows SharePoint Services 工作流中的任務。
作為工作流作者,您可以指定任務架構。例如,任務清單可包括以下各項:
- 任務标題
- 任務配置設定到的使用者的名稱
- 任務狀态
- 任務優先級
- 任務截止日期
- 到引用項目的連結
随後使用者可以根據需要編輯任務。工作流執行個體會收到工作流任務更改的通知并可以按工作流中指定的方式選擇對其進行響應。
用于 Visual Studio 2005 Designer for Windows Workflow Foundation 的 Windows SharePoint Services 工作流項目包括建立、删除及更新任務的活動,以及建立、更新或删除任務時作為事件處理程式的活動。
傳回頁首
編寫 SharePoint 工作流
Microsoft 為 Windows SharePoint Services 提供了兩種用于編寫工作流的開發工具:Visual Studio 2005 Designer for Windows Workflow Foundation 和 Office SharePoint Designer 2007。由于每種編寫工具所生成的工作流分别具有不同的屬性和功能,是以需要仔細檢查每種工具。
圖 5 顯示了使用每種編寫工具建立、部署、關聯和運作工作流時需要執行的不同步驟。通常,這兩種工具之間的最大差别在于:
- Visual Studio 2005 Designer for Windows Workflow Foundation 中的工作流編寫由專業開發人員執行,由其建立可跨多個站點部署并含有自定義代碼和活動的工作流模闆。開發人員然後将該工作流模闆傳給伺服器管理者進行實際部署和關聯。
- SharePoint Designer 中的工作流編寫适于某些非專業的開發人員來完成,如,想要為特定清單或文檔庫建立工作流的 Web 設計者或知識工作者。此時,設計者将局限于安全控件清單上的工作流活動,同時該工作流不能包括自定義代碼。在工作流編寫過程中,工作流編寫者會将工作流模闆直接部署到清單或文檔庫中。
有關這兩個工具功能的詳細比較,請參閱比較 Visual Studio 2005 Designer for Windows Workflow Foundation 和 SharePoint Designer 2007。
圖 5. 工作流編寫、部署和初始化程序
傳回頁首
在 Visual Studio 2005 中編寫 SharePoint 工作流
Visual Studio 2005 Designer for Windows Workflow Foundation 是 Visual Studio 2005 的一個附加元件,它提供了通過使用圖形界面來快速開發工作流的方法,其中利用了開發人員關于 Visual Studio 開發環境的知識。
Visual Studio 2005 Designer for Windows Workflow Foundation 是一個可供您按照與用于封裝業務流程的代碼開發相內建的方式來快速建立工作流的工具。為此,Visual Studio 2005 Designer for Windows Workflow Foundation 提供了一個包含直覺控件的圖形界面,該界面托管于常用的 Visual Studio 開發環境中。其功能包括:
- 一個拖放式畫面,允許通過您從“Toolbox”(工具箱)中拖出的預定義工作流活動集合自定義工作流
- 允許您使用直覺圖形工具來處理工作流标記的界面
- 與“Properties”(屬性)視窗內建,是以開發人員可通過圖形界面或直接在 code-beside 檔案中配置工作流活動的屬性,并使得這兩者始終保持同步
- 通過附加到 Windows SharePoint Services 程序調試您的工作流,包括在工作流中設定斷點
- 能夠為活動附加錯誤、補償和事件處理程式,并能夠以圖形方式“注釋掉”活動
Microsoft 下載下傳中心的 Microsoft Windows Workflow Foundation Runtime Components Beta 2.2 and Visual Studio 2005 Extensions for Windows Workflow Foundation Beta 2.2(英文)中提供了 Visual Studio 2005 Designer for Windows Workflow Foundation。此下載下傳中還包含 Windows Workflow Foundation 運作時引擎以及 Windows Workflow Foundation SDK。
為進一步協助您的工作流開發,Microsoft 還提供了兩個 Visual Studio 項目模闆包,以與 Visual Studio 2005 Designer for Windows Workflow Foundation 一同使用:一個是針對 Windows SharePoint Services 工作流而定制,另一個是針對為 SharePoint Server 建立工作流而定制。
Windows SharePoint Services 工作流項目模闆含有對 Windows SharePoint 命名空間的引用,并包括專門針對 Windows SharePoint Services 環境而設計的自定義工作流活動。通過這些自定義活動,您能夠執行 Windows SharePoint Services 環境的一些常用功能,如建立、更新、完成和删除 SharePoint 任務以及發送電子郵件和啟用工作流修改。
SharePoint Server 工作流項目含有 Windows SharePoint Services 工作流項目模闆中的一切内容,以及對 SharePoint Server 命名空間的引用和其他用于在 SharePoint Server 工作環境中管理工作流任務的功能。
Visual Studio 中的工作流開發過程
通常,在使用 Visual Studio 2005 Designer for Windows Workflow Foundation 為 Windows SharePoint Services 或 Office SharePoint Server 開發工作流時,需執行以下基本步驟:
- 在 Visual Studio 2005 Designer for Windows Workflow Foundation 中編寫工作流,包括 code-beside 檔案(如果需要)。
- 設計并釋出要與工作流一同使用的任何窗體。
- 編寫功能定義和工作流模闆定義檔案,其中包含工作流程式集的相關資訊,并将窗體綁定到工作流程式集。
- 将工作流檔案編譯為 .NET 程式集。
- 将工作流程式集和工作流定義打包在一起,并使用 Windows SharePoint Services 中的功能對其進行部署。
- 使用 Visual Studio 2005 Designer for Windows Workflow Foundation 調試活動的工作流程式集。
- 根據需要重新編譯和部署工作流程式集以修複發現的所有錯誤。
以下部分概述了其中的每一個開發步驟。
使用 Visual Studio 2005 Designer for Windows Workflow Foundation 建立工作流
選擇新的 Windows SharePoint Services 或 Office SharePoint Server 工作流項目時,Visual Studio 将顯示 Visual Studio 2005 Designer for Windows Workflow Foundation 設計畫面(圖 6)。此設計畫面提供了一個圖形界面,在其中可通過從“Toolbox”(工具箱)中拖放各種活動來集合工作流。
圖 6. Visual Studio 2005 Designer for Windows Workflow Foundation 界面
在将某個特定活動拖到工作流上時,Visual Studio 2005 Designer for Windows Workflow Foundation 将向您顯示該活動在此工作流中的有效位置。您不能将活動放置在對于它無效的位置中。例如,不能将 Send 活動作為 Listen 活動分支中的第一個活動來放置。如圖 7 中所示,Visual Studio 2005 Designer for Windows Workflow Foundation 通過顯示綠色的加号圖示來訓示特定活動的有效位置。
圖 7. 工作流活動的有效位置
在以圖形方式設計工作流時,Visual Studio 2005 Designer for Windows Workflow Foundation 實際上會生成對應的标記。
此外,如果要使用代碼分離,工作流項目中會包含一個 code-behind 檔案,可在其中編寫工作流的業務邏輯。需要時,可在工作流設計畫面和 code-beside 檔案之間進行操作切換。
設定工作流屬性
向工作流添加活動後,隻有為該活動設定屬性,其才會在工作流中有效。可使用标準的 Visual Studio“Properties”(屬性)視窗來設定這些屬性。可指定的資料類型取決于屬性自身所接受的資料類型:文字值、變量或方法名。
如果要為屬性指定變量,可使用兩種方法:一種是在“Properties”(屬性)視窗中輸入變量名,此種情況下,Visual Studio 2005 Designer for Windows Workflow Foundation 會在 code-behind 檔案中自動聲明該變量;另外一種是在 code-behind 檔案中聲明變量,然後在“Properties”(屬性)視窗中将其選中。
有些活動屬性實質上是對符合特定簽名的 code-beside 檔案中方法的引用。與變量名一樣,您可在“Properties”(屬性)視窗中輸入方法名,然後讓 Visual Studio 2005 Designer for Windows Workflow Foundation 将方法簽名添加到 code-behind 檔案中,或者,可在 code-behind 檔案中建立方法,然後在“Properties”(屬性)視窗中将其選中。
還可将某個屬性綁定到其他活動的屬性。
處理程式活動
工作流可能具有多個潛在的故障點。跟蹤工作流的狀态并在發生錯誤時進行報告是很重要的,這樣便能夠準确地解決問題,且花費的代價最少。就工作流而言,保持一組密切相關的操作的完整性同等重要,這樣,在某個操作的一部分發生而另一部分卻沒有時,可将整個操作復原。可使用 FaultHandlerActivity、TransactionScopeActivity、CompensationHandlerActivity 和 CancellationHandlersActivity 活動處理錯誤以維護工作流的狀态,并在問題發生時加以修複。
您可将 FaultHandlersActivity 活動視為 C 語言的 try 塊,并可向其附加相當于異常處理程式的 FaultHandlerActivity 活動的有序集合。可将這些異常處理程式視為 C 語言的 catch 塊。如果在執行複合活動期間引發異常,則 WF 運作時引擎會将此異常與 FaultHandlerActivity 活動所處理的異常類型進行比對。如果運作時引擎未發現比對的異常處理程式,則将此異常傳遞到下一更進階别的複合活動,在其中重複此過程,以此類推,直至找到相應的處理程式。
您也可擁有用于響應事件的 EventHandlersActivity 活動,方法是向 EventHandlerScopeActivity 活動添加事件處理程式。從概念上講,這些事件處理程式與 C 或 Visual Basic .NET 語言中的處理程式非常相似。要建立事件處理程式,必須使用 EventDrivenActivity 活動。
CompensationHandlerActivity 活動含有用于補償或復原複合活動的操作的代碼(如果該活動未成功執行)。
Windows SharePoint Services 工作流中的 ASP.NET 窗體
如前文所述,您可以使用 ASP.NET 來建立要與 Windows SharePoint Services 工作流一起使用的窗體。随後,在工作流的适當階段,這些窗體會顯示在 Windows SharePoint Services 使用者界面中。
通過您在工作流模闆定義 XML 檔案中所提供的資訊,工作流窗體會被後期綁定到工作流程式集中。工作流模闆定義架構包含一些元素,它們用于訓示可與 Windows SharePoint Services 工作流一起使用的各種窗體的 URL。是以,可為用于任何自定義工作流修改的窗體以及用于工作流中所使用的各種 SharePoint 任務的窗體建立元素。
多數情況下,工作流程式集自身不包含任何與工作流窗體本身相關的資訊。開發人員隻需編輯工作流定義 XML(而不必一定重新編譯工作流程式集本身)便可更改要使用的工作流窗體。工作流修改是一個例外;實作工作流修改的每個活動必須包含用于該工作流修改的窗體的 GUID。
SharePoint Server 工作流中的 InfoPath 窗體
盡管也可以在 SharePoint Server 工作流中使用 ASP.NET 工作流窗體,但 SharePoint Server 能夠讓您擴充工作流窗體并在 Microsoft Office 用戶端應用程式中顯示這些窗體。
可将 InfoPath 窗體與工作流一起使用。可通過 InfoPath 建立對稱窗體,即,無論這些窗體是顯示在 SharePoint Server Web 界面中還是顯示在 Microsoft Office 用戶端應用程式(如 Word、Excel 或 PowerPoint)中,它們的外觀和操作均完全相同。這就提供了更加豐富的互動體驗,使用者可直接在用戶端應用程式中與工作流互動,而不必離開用戶端并切換到 SharePoint Server Web 界面。而且作為開發人員,您不必建立兩個獨立的窗體(一個用在伺服器上,另一個用在用戶端中)來為使用者提供用戶端應用程式內建。
有關建立常見對稱窗體的詳細資訊,請參閱 Microsoft Office InfoPath 2007 客戶幫助或 Office Online。
Office Forms Services 是适用于 InfoPath 窗體的基于伺服器的運作時環境,SharePoint Server 使用它來托管工作流窗體。Office Forms Services 使用您在 InfoPath 用戶端應用程式中所建立的窗體,并将這些窗體顯示在 ASP.NET 架構中,ASP.NET 架構相當于窗體的運作時環境。此環境提供與 InfoPath 用戶端應用程式相比對的窗體編輯體驗。
有關 Office Forms Services 的詳細資訊,請參閱 Microsoft Office SharePoint Server 2007 SDK。
注意 由于 Office 2007 用戶端應用程式(如 Word、PowerPoint 和 Excel)具有托管 InfoPath 窗體的功能,是以使用者不必安裝 InfoPath 用戶端應用程式來利用其豐富的內建。
顯示 InfoPath 工作流窗體
SharePoint Server 使用相同的基本技術來顯示所有自定義 InfoPath 工作流窗體,包括關聯、初始化、修改或編輯任務窗體。
當使用者在 SharePoint Server 界面中單擊連結來顯示某個工作流窗體時,SharePoint Server 會加載一個 ASPX 頁面,其中包含 Office Forms Services Web 部件。此 Web 部件随後會将相應的 InfoPath 窗體轉換成 ASP.NET 并将其加載。當使用者送出該窗體時,Web 部件會收到窗體中的資料并相應地對其進行處理。
SharePoint Server 中包括其中包含 Office Forms Services Web 部件的 ASPX 頁面。
指定 InfoPath 工作流窗體
此外,在工作流模闆定義(而非工作流自身)中指定您要使用的自定義窗體。多數情況下,這涉及到設定兩個元素。首先,将該工作流程序(關聯、初始化、修改等)的窗體 URL 設定為 SharePoint Server 中包含的适當的 ASPX 托管頁面。接下來,添加一個元素,用來為該類型工作流程序指定自定義 InfoPath 窗體的 URN。
通過使用 InfoPath 工作流窗體送出資訊
為了使托管 ASPX 頁面接收到被托管窗體中的資料,開發人員在 InfoPath 窗體中添加了一個“Submit”(送出)按鈕。通過借助到托管環境的資料連接配接,此按鈕使用某個規則來送出資料。當使用者單擊“Submit”(送出)按鈕時,此連接配接會自動将資料傳遞回托管 ASPX 頁面中。随後,托管 ASPX 頁面會對資料分析進行處理,并根據需要将其傳遞回工作流或文檔庫。
部署工作流
完成對工作流的指定後,您可以選擇将工作流作為工作流或是作為活動來進行編譯。
完成對工作流的編譯後,您可使用 SharePoint Features 功能來打包和部署工作流程式集以及任何必需的支援檔案。
功能打包是一種為了便于部署而封裝 Windows SharePoint Services 解決方案和功能的方式。開發人員可根據它所提供的機制來打包解決方案(如工作流、Web 部件、清單和站點定義)所需的檔案,以便于分布和部署。開發人員将所需檔案打包為 .wsp 檔案,該檔案實質上是一個 .cab 檔案,其中包含列有所含内容的清單。有關 SharePoint Features 的詳細資訊,請參閱 Windows SharePoint Services V3 SDK。
您部署的每個工作流模闆必須包含一個工作流模闆定義檔案。工作流模闆定義是一個 XML 檔案,它包含 Windows SharePoint Services 執行個體化和運作工作流時所需的資訊,諸如以下内容:
- 工作流模闆的名稱、GUID 及描述
- 程式集
- 與此工作流模闆一起使用的任何自定義窗體的 URL(或 IP 窗體的 URN)
- 工作流名稱、工作流引擎名稱以及運作工作流時要使用的托管服務程式集的名稱(可選)
- 這些程式集中要調用的正确的類(可選)
必須将工作流程式集本身部署到全局程式集緩存中。
在将其部署到站點後,該工作流即可作為工作流模闆使用,SharePoint 管理者可将其與該站點上的文檔庫和清單相關聯。
調試工作流
部署工作流程式集後,可通過打開工作流項目并附加到 Windows SharePoint Service w3wp 程序來調試工作流。
由于 Visual Studio 2005 Designer for Windows Workflow Foundation 是在 Visual Studio 中進行托管的,是以可充分利用 Visual Studio 的調試功能。對于 code-beside 檔案中所編寫的代碼以及設計畫面中的工作流活動,均可設定斷點。
注意 為友善調試,強烈建議您在計劃部署工作流模闆的伺服器上開發這些工作流模闆。
Visual Studio 2005 Designer for Windows Workflow Foundation 不僅支援标準的 Visual Studio 調試功能(如“Breakpoints”(斷點)和“Call Stack”(調用堆棧)視窗),它還包含一系列可視訓示器,用于在調試過程中提供資訊。在調試程式集的同時,還可向工作流活動添加斷點。
可執行“步入”、“步出”和“單步跳過”操作來運作整個工作流代碼。
Visual Studio 2005 Designer for Windows Workflow Foundation 不支援下列調試類型:
- 托管程序中運作時異常的實時調試
- 通過在“Task Manager”(任務管理器)中選擇程序進行實時調試
有關使用 Visual Studio 2005 Designer for Windows Workflow Foundation 進行調試的詳細資訊,請參閱 Windows Workflow Foundation SDK。
注意 在 Microsoft 下載下傳中心的 Microsoft Windows Workflow Foundation Runtime Components Beta 2.2 and Visual Studio 2005 Extensions for Windows Workflow Foundation Beta 2.2(英文)下載下傳中提供了 Windows Workflow Foundation SDK。此下載下傳中還包含 Visual Studio 2005 Designer for Windows Workflow Foundation 以及 Windows Workflow Foundation 運作時引擎。
傳回頁首
在 SharePoint Designer 2007 中編寫 SharePoint 工作流
在 Office SharePoint Designer 2007 中編寫工作流時,您是直接針對 Windows SharePoint Services 中的特定清單或文檔庫來編寫該工作流和進行資料綁定。您使用的是預定義的工作流活動清單,并不使用任何代碼。您設計的工作流将不作為程式集進行編譯,而是作為源檔案進行存儲,直到在它首次運作時,Windows SharePoint Services 才會對它進行編譯。
該方法具有以下優點:
- 可快速開發和測試工作流。
- 由于工作流特定于給定清單,是以部署過程相對簡單一些。
- 因為同樣的原因,安全問題也簡單了許多。
-
由于并未将工作流編譯為程式集,是以,可将 SharePoint Designer 中所建立的工作流部署到伺服器上(其中,管理政策禁止自定義代碼程式集)。
注意 SharePoint Designer 中所編寫的工作流收集自預定義活動的“安全清單”,管理者可能已準許這些活動在伺服器上運作。
- 工作流可由具有較少開發人員經驗的使用者建立,如 Web 設計者或知識工作者。
這種方法還表明,SharePoint Designer 中編寫的工作流與使用 Visual Studio 2005 Designer for Windows Workflow Foundation 建立的工作流在一些重要的方面存在着差異:
- 在 SharePoint Designer 中編寫的工作流不能被部署到多個清單中。工作流僅對專門為之建立該工作流的清單有效。
- 由于直接對清單編寫工作流,是以該工作流在設計時與該清單相關聯。是以,在 SharePoint Designer 中編寫的工作流不包含關聯階段。
- 對于在 SharePoint Designer 中編寫的工作流,不能執行工作流修改。
- 不能對 SharePoint Designer 中的内容類型進行編寫。
有關詳細的比較資訊,請參閱比較 Visual Studio 2005 Designer for Windows Workflow Foundation 和 SharePoint Designer 2007。
運作 SharePoint Designer 2007 中所編寫的工作流
由于在 Office SharePoint Designer 中編寫的工作流不包含自定義代碼,是以它們不作為程式集進行編譯和部署。而是作為各自的源檔案存儲在 Windows SharePoint Services 内部,并僅當需要時才被編譯到記憶體中。
對于每個站點,這種類型的工作流均存儲在單獨的文檔庫中。對于在 SharePoint Designer 中編寫的每個工作流,此文檔庫均包含一個檔案夾。此檔案夾包含該工作流所需的所有源檔案,其中包括:
- 工作流标記檔案
- 工作流規則檔案
- 任何自定義工作流窗體所需的 ASPX 窗體
Windows SharePoint Services 包括一個實時編譯器,用來在工作流首次在某個項目上啟動時将源檔案編譯成工作流。Windows SharePoint Services 将已編譯的工作流保留在記憶體中,直到它再次被調用,這類似于伺服器将已編譯的 .aspx 頁面保留在記憶體中,以便在下次調用頁面時提高執行性能。
每當某個工作流在項目上啟動時,Windows SharePoint Services 會判斷該工作流是已被部署為程式集還是源檔案。如果存在工作流程式集,則 Windows SharePoint Services 會調用該程式集來建立工作流執行個體。如果已将工作流部署為源檔案,則 Windows SharePoint Services 會判斷是否已根據記憶體中的這些源檔案編譯了一個工作流。如果是這樣,則 Windows SharePoint Services 會調用記憶體中已編譯的工作流來建立工作流執行個體。如果不是這樣,Windows SharePoint Services 會使用其實時編譯器來将源檔案編譯為記憶體中的工作流,随後再調用該工作流來建立工作流執行個體。
SharePoint Designer 2007 中的工作流開發過程
為實作工作流的快速設計和部署,SharePoint Designer 中的開發過程将比 Visual Studio 中的開發過程簡單得多。
通常,在使用 Visual Studio 2005 Designer for Windows Workflow Foundation 為 Windows SharePoint Services 或 SharePoint Server 開發工作流時,需執行以下基本步驟:
- 通過收集和配置 SharePoint Designer 中提供的預定義活動和條件來編寫工作流。
- 如有必要,讓 SharePoint Designer 自動生成用于工作流初始化和任何自定義 SharePoint 任務的 ASP.NET 窗體。
- 如有必要,自定義工作流窗體。
SharePoint Designer 會自動生成工作流定義模闆并處理工作流到指定清單的部署。
以下部分概述了其中的每一個開發步驟。
使用 SharePoint Designer 2007 建立工作流
SharePoint Designer 使用的是向導驅動界面,使用者可通過該界面從預定義活動中收集順序工作流。使用者從預定義清單中選擇活動,然後使用 SharePoint Designer 界面對它們進行配置。這些活動可與 Visual Studio 2005 Designer for Windows Workflow Foundation 中所提供的活動相同;這兩個工具所提供的活動之間不存在任何差別。
但在 SharePoint Designer 中,每個活動都作為一個操作出現,這些操作通過包含變量的句子來表示,使用者可使用下拉菜單和查找對話框來配置這些變量。使用者還可以選擇條件,它們是可配置條件子句,用來訓示工作流的流程。
當使用者在工作流界面中選擇和配置條件及操作時,SharePoint Designer 會生成兩個檔案,它們實際上代表工作流類:
- 工作流标記檔案,它包含用于描述工作流中所含活動的标記
- 工作流規則檔案,它包含以聲明性規則窗體而非代碼封裝的工作流的業務邏輯
添加自定義活動和條件
如前所述,使用 SharePoint Designer 的工作流設計者無法建立可用于自身工作流中的自定義活動。而是隻能使用顯示在 SharePoint Designer 中的安全控件清單(可能已經過伺服器管理者的準許)中已經提供的活動和條件。
條件隻是一個包含靜态方法的自定義程式集,該靜态方法會在調用時判斷某個條件并傳回布爾值。
開發人員可建立自定義活動和條件,并使得它們在安全清單中可用。為此,開發人員必須:
- 建立活動或條件,将其作為強命名程式集進行編譯,并将其部署到全局程式集緩存。
- 将活動或條件添加到 web.config 檔案的操作安全清單中。
- 在工作流檔案夾的 WSS.Actions 檔案中,為用于表示 SharePoint Designer 使用者界面中的活動或條件的句子添加規則和參數。這是用于指定界面中活動或條件出現及執行的方式的标記,因為此資訊不會出現在活動或條件程式集中。
有關部署自定義活動和條件的詳細資訊,請參閱 SharePoint Designer 幫助。
SharePoint Designer 工作流中的 ASP.NET 窗體
在 SharePoint Designer 中可建立工作流的初始化階段。如果您要這樣做,SharePoint Designer 會根據您的初始化規範,使用 ASP.NET 自動生成初始化窗體。
同樣,您可以為工作流建立自定義 SharePoint 任務。SharePoint Designer 會再次根據您的規範,自動生成此任務的 ASP.NET 窗體。
這些 aspx 窗體與工作流源檔案一起存儲在 SharePoint 站點上。如同任何其他 aspx 窗體一樣,您可以打開并對其自定義。
注意 SharePoint Designer 2007 不提供與 InfoPath 窗體的內建。
使用 SharePoint Designer 2007 部署工作流
由于您是針對特定清單進行編寫,是以,與在 Visual Studio 2005 Designer for Windows Workflow Foundation 中所建立的工作流相比,在 Office SharePoint Designer 中所建立的工作流的部署過程要簡單得多。SharePoint Designer 用于處理工作流到指定清單的部署。
SharePoint Designer 不提供任何自定義調試功能。
從清單中删除在 SharePoint Designer 中編寫的工作流并不會删除用于在記憶體中編譯該工作流的實際源檔案。而是此工作流不再與清單相關聯,但源檔案仍存儲在站點的工作流文檔庫中。
在 Windows SharePoint Services 對象模型中,不能将在 SharePoint Designer 中編寫的工作流與在 Visual Studio 2005 Designer for Windows Workflow Foundation 中編寫的工作流區分開來。
傳回頁首
比較 Visual Studio 2005 Designer for Windows Workflow Foundation 和 SharePoint Designer 2007
下表提供 Visual Studio 2005 Designer for Windows Workflow Foundation 和 Office SharePoint Designer 2007 所提供的功能之間,以及使用這兩者可建立的工作流之間的詳細比較。
Visual Studio 2005 Designer for Windows Workflow Foundation | SharePoint Designer 2007 |
---|---|
可為 Windows SharePoint Services 或 SharePoint Server 編寫工作流 | 可為 Windows SharePoint Services 或 SharePoint Server 編寫工作流 |
開發人員可通過 code-behind 檔案來編寫自定義 Visual C# 或 Visual Basic .NET 代碼,以表示業務邏輯 | 無 code-behind 檔案;工作流規則檔案采用聲明方式來封裝業務邏輯 |
生成工作流标記檔案 | 生成工作流标記檔案 |
将工作流編寫為可與多個站點和清單關聯的模闆 | 設計時針對特定清單來編寫工作流和進行資料綁定 |
工作流标記檔案或者标記和 code-behind 檔案被編譯到工作流程式集中 | 工作流标記、工作流規則和支援檔案存儲在站點上的特定文檔庫中,但未進行編譯 |
工作流模闆必須與該工作流模闆在其上可用的每個清單相關聯 | 關聯在針對特定清單編寫工作流時發生;不需要或不能進行後期關聯 |
可以使用任何窗體技術。例如,Windows SharePoint Services 工作流的 ASP 窗體,或者 SharePoint Server 工作流的 InfoPath 窗體 | 自動生成 ASP.NET 窗體,可在随後進行自定義 |
可包括工作流修改 | 工作流修改不可用 |
可以使用自定義對稱 InfoPath 窗體,該窗體可實作自定義工作流窗體的 Office 用戶端內建 | InfoPath 窗體內建不可用 |
可編寫自定義活動以包含在工作流中 | 必須使用所提供的活動 |
将工作流程式集和工作流定義打包為 SharePoint 功能,然後部署到站點 | 自動處理到特定清單的部署 |
啟動工作流時可以使用初始化窗體收集使用者資訊 | 啟動工作流時可以使用初始化窗體收集使用者資訊 |
使用者與 SharePoint 任務進行互動時可以使用自定義窗體 | 使用者與 SharePoint 任務進行互動時可以使用自定義窗體 |
可以進行 Visual Studio 調試 | 不能進行逐漸調試 |
可以編寫順序工作流和狀态工作流 | 隻能編寫順序工作流 |
傳回頁首
Windows SharePoint Services 中的工作流結構
圖 8 顯示在工作流模闆建立、部署并與特定内容類型、清單或文檔庫建立關聯後,如何加入 Windows SharePoint Services 工作流結構的各個元素。
在将工作流模闆與給定内容類型、清單或文檔庫關聯時,Windows SharePoint Services 會将管理者設定的關聯參數資訊寫入場級别工作流關聯表中。此關聯表中的條目會将特定内容類型、清單或文檔庫連結到相關聯工作流的工作流模闆定義。而工作流模闆定義中的資訊又包括對工作流程式集本身的引用,以及工作流使用的任何自定義工作流窗體。
對于在 SharePoint Designer 2007 中編寫的工作流,設計器會自動将關聯參數資訊寫入工作流關聯表,并生成和安裝工作流模闆定義。另外,工作流會作為标記和工作流規則源檔案(而非編譯後的程式集)存儲在站點級工作流文檔庫中。
圖 8. Windows SharePoint Services 中的工作流元件結構
傳回頁首
使用工作流命名空間
在完成工作流解決方案的部署後,可使用 Windows SharePoint Services 對象模型來查詢工作流程序以及以程式設計方式執行工作流操作,如,将工作流添加到清單或為某個項目啟動工作流。
主要 Microsoft.Windows.SharePoint.Workflow 對象
Microsoft.Windows.SharePoint.Workflow 命名空間表示包含在 Windows SharePoint Services 中的工作流功能。
SPWorkflowTemplateCollection 對象表示目前在站點上部署的工作流模闆。每個 SPWorkflowTemplate 對象都表示一個工作流模闆,其中包含可用來獲得或設定模闆相關資訊(如,模闆的執行個體化資料以及曆史和任務清單)的屬性。
要将工作流與清單或文檔庫關聯,請使用 SPList.AddWorkflowAssociation 方法。此重載方法使用四個參數:
- 工作流模闆名稱或 ID
- 要為工作流指定的名稱
- 要與此工作流一起使用的任務清單的名稱或 ID
- 工作流的曆史清單
與通過使用者界面添加工作流相同,此方法将在清單中添加工作流的狀态列。使用 SPList.RemoveWorkflowAssociation 方法從清單中删除工作流模闆。
SPWorkflowAssociationCollection 對象表示站點的内部工作流關聯表;即,它表示站點集合中清單目前關聯的工作流,以及每個工作流的關聯資訊。每個 SPWorkflowAssociation 對象都表示一個已與特定清單相關聯的工作流模闆,并且包含用于傳回關聯的相關自定義資訊(如工作流是否已啟用、工作流是否已修改、工作流所關聯的清單以及對用作此 SPWorkflowAssociation 對象基礎的 SPWorkflowTemplate 對象的引用)的屬性。
對于存儲為未編譯檔案的工作流(如在 SharePoint Designer 中編寫的那些工作流),SPWorkflowAssociation.IsDeclarative 屬性會傳回 True。
SPWorkflowCollection 表示給定清單項上已經運作或目前正在運作的工作流執行個體。每個 SPWorkflow 對象都包含用于傳回工作流執行個體相關資訊(如,工作流是否已完成、其内部狀态以及它所基于的工作流模闆)的屬性。此外,每個工作流還包含該工作流的任務集合 SPWorkflowTaskCollection。
使用 SPListItem.Workflows 屬性傳回 SPWorkflowCollection 對象,它表示該清單項目前正在運作的工作流。
以程式設計方式管理運作中的工作流執行個體
使用者通過 Windows SharePoint Services 使用者界面,與在項目上運作的工作流分别進行互動。但 Windows SharePoint Services 為您提供了通過對象模型,集中控制整個伺服器場中正在運作的工作流執行個體的功能。使用 SPWorkflowManager 對象管理整個場中正在運作的工作流執行個體。在使用者界面中,SPWorkflowManager 對象沒有等效對象。雖然要通過 SPSite 對象通路此對象,但您可使用它來管理整個場中運作的工作流執行個體。使用 SPWorkflowManager 對象可執行以下操作:
- 啟動、運作或取消工作流。
- 傳回特定項目上目前正在運作的所有工作流。
- 取消清單中基于特定工作流模闆的所有工作流執行個體。
- 執行其他工作流管理操作。
要手動啟動某項目的特定工作流(即,未配置為自動啟動的工作流),請使用 SPSite.WorkflowManager.StartWorkflow 方法。此方法使用三個參數:清單項的名稱、工作流模闆的名稱以及啟動事件。
圖 9 顯示了 SPWorkflowManager 對象及其包含的對象的分層視圖。
圖 9. SPWorkflowManager 對象分層結構
傳回頁首
結論
Windows SharePoint Services V3 可托管 Windows Workflow Foundation,通過 Windows Workflow Foundation,您可将自定義業務流程(實作為順序工作流或狀态機工作流)附加到 SharePoint 項目。此實作包括建立自定義工作流功能以及用于實作使用者互動的窗體內建功能。通過提供與那些可在 Office 用戶端應用程式(如 Word、PowerPoint、Excel 和 InfoPath)中托管的對稱 InfoPath 窗體的內建,SharePoint Server 2007 擴充了這些工作流功能。
Microsoft 為 Windows SharePoint Services 提供了兩種用于編寫工作流的強大工具。Visual Studio 2005 Designer for Windows Workflow Foundation 是 Visual Studio 2005 的一個附加元件,使您能夠開發可部署到多個站點和清單的工作流模闆和自定義代碼。也可根據工作流活動的預定義清單,使用 SharePoint Designer 快速開發和部署清單特定的工作流。
無論哪種情況,在完成工作流解決方案的部署後,您都可以使用 Windows SharePoint Services 對象模型來查詢工作流程序以及以程式設計方式執行工作流操作。