HOW TO:建立活動
本主題僅適用於 Windows Workflow Foundation 4。
活動是 WF 中的行為核心單位。 活動的執行邏輯可以使用 Managed 程式碼或其他活動來加以實作。 本主題說明如何使用程式碼實作活動的執行邏輯來建立簡單的活動,以及使用其他活動來定義活動的實作。 這些活動用於以下主題:HOW TO:建立工作流程和 HOW TO:執行工作流程。
若要建立活動程式庫專案
開啟 Visual Studio 2010,並依序選取 [檔案] 功能表中的 [新增]、[專案]。
展開 [已安裝的範本] 清單中的 [其他專案類型] 節點,並選取 [Visual Studio 方案]。
選取 [Visual Studio 方案] 清單中的 [空白方案]。 確認已選取 [.NET Framework 版本] 下拉式清單中的 [.NET Framework 4]。 在 [名稱] 方塊中輸入 GettingStartedTutorial,然後按一下 [確定]。
以滑鼠右鍵按一下 [方案總管] 中的 [GettingStartedTutorial],並依序選擇 [加入]、[新增專案]。
提示: 如果沒有顯示 [方案總管] 視窗,請選取 [檢視] 功能表上的 [方案總管]。 依序選取 [已安裝的範本] 清單中的 [Visual C#] 和 [工作流程] (或是 [Visual Basic] 和 [工作流程])。 確認已選取 [.NET Framework 版本] 下拉式清單中的 [.NET Framework 4]。 請選取 [工作流程] 清單中的 [活動程式庫]。 保留預設值,然後按一下 [確定]。
注意: 依據設定哪個程式語言為 Visual Studio 主要語言而異,[Visual C#] 或 [Visual Basic] 節點可能會顯示在 [已安裝的範本] 清單的 [其他語言] 節點底下。 在 [方案總管] 中,以滑鼠右鍵按一下 [Activity1.xaml],再選取 [刪除]。 按一下 [確定] 進行確認。
若要建立 ReadInt 活動
選擇 [專案] 功能表中的 [加入新項目]。
選取 [已安裝的範本] 清單中的 [工作流程]。 選取 [工作流程] 清單中的 [程式碼活動]。
在 [名稱] 方塊中,輸入 ReadInt,然後按一下 [加入]。
以下列定義取代現有的
ReadInt
定義。Public NotInheritable Class ReadInt Inherits NativeActivity(Of Integer) <RequiredArgument()> Property BookmarkName() As InArgument(Of String) Protected Overrides Sub Execute(ByVal context As NativeActivityContext) Dim name As String name = BookmarkName.Get(context) If name = String.Empty Then Throw New ArgumentException("BookmarkName cannot be an Empty string.", "BookmarkName") End If context.CreateBookmark(name, New BookmarkCallback(AddressOf OnReadComplete)) End Sub ' NativeActivity derived activities that do asynchronous operations by calling ' one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext ' must override the CanInduceIdle property and return True. Protected Overrides ReadOnly Property CanInduceIdle As Boolean Get Return True End Get End Property Sub OnReadComplete(ByVal context As NativeActivityContext, ByVal bookmark As Bookmark, ByVal state As Object) Result.Set(context, Convert.ToInt32(state)) End Sub End Class
public sealed class ReadInt : NativeActivity<int> { [RequiredArgument] public InArgument<string> BookmarkName { get; set; } protected override void Execute(NativeActivityContext context) { string name = BookmarkName.Get(context); if (name == string.Empty) { throw new ArgumentException("BookmarkName cannot be an Empty string.", "BookmarkName"); } context.CreateBookmark(name, new BookmarkCallback(OnReadComplete)); } // NativeActivity derived activities that do asynchronous operations by calling // one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext // must override the CanInduceIdle property and return true. protected override bool CanInduceIdle { get { return true; } } void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state) { this.Result.Set(context, Convert.ToInt32(state)); } }
注意: 衍生自 NativeActivity 而非 CodeActivity 的 ReadInt
活動,是以活動專案為基礎之程式碼活動的預設值。如果活動透過 Result 引數公開提供單一結果,就可以使用 CodeActivity,但 CodeActivity 不支援使用書籤,因此會使用 NativeActivity。
若要建立提示活動
按 F6 以建置專案。 這樣便可使用這個專案中的
ReadInt
活動,從這個步驟建置自訂活動。選擇 [專案] 功能表中的 [加入新項目]。
選取 [已安裝的範本] 清單中的 [工作流程]。 選取 [工作流程] 清單中的 [活動]。
在 [名稱] 方塊中,輸入 Prompt,然後按一下 [加入]。
如果未顯示的話,請按兩下 [方案總管] 中的 [Prompt.xaml],在設計工具中顯示它。
按一下活動設計工具左下角的 [引數],顯示 [引數] 窗格。
按一下 [建立引數]。
在 [名稱] 方塊中輸入 BookmarkName,並選取 [方向] 下拉式清單中的 [內],再選擇 [引數型別] 下拉式清單中的 [字串],然後按 ENTER 儲存引數。
按一下 [建立引數]。
在新加入之
BookmarkName
引數下方的 [名稱] 方塊中輸入 Result,並選取 [方向] 下拉式清單中的 [外],再選取 [引數型別] 下拉式清單中的 [Int32],然後按下 ENTER。按一下 [建立引數]。
在 [名稱] 方塊中輸入 Text,並選取 [方向] 下拉式清單中的 [內],再選取 [引數型別] 下拉式清單中的 [字串],然後按下 ENTER 儲存引數。
這三個引數會繫結至下列步驟中加入至
Prompt
活動之 WriteLine 和ReadInt
活動的對應引數。按一下活動設計工具左下角的 [引數],關閉 [引數] 窗格。
從 [工具箱] 的 [控制流程] 區段,將 [Sequence] 活動拖放到活動設計工具上。
提示: 如果沒有顯示 [工具箱] 視窗,請從 [檢視] 功能表中選取 [工具箱]。 從 [工具箱] 的 [基本] 區段,將 [WriteLine] 活動拖放到 [Sequence] 活動內。
在 [屬性] 視窗的 [輸入 VB 運算式] 方塊中輸入 Text,將 [WriteLine] 活動的 [Text] 引數繫結至 [提示] 活動的 [Text] 引數,然後按兩次 TAB 鍵解除 [IntelliSense] 清單成員視窗,並將選項從屬性中移出以儲存屬性值。 這個屬性也可藉由在代表活動本身的 [輸入 VB 運算式] 方塊中輸入 Text 來設定。
提示: 如果沒有顯示 [屬性視窗],請從 [檢視] 功能表選取 [屬性視窗]。 從 [工具箱] 的 [ActivityLibrary1] 區段將 [ReadInt] 活動拖放到 [Sequence] 活動內,這樣一來,就會追蹤 [WriteLine] 活動。
在 [屬性視窗] 中 [BookmarkName] 引數右側的 [輸入 VB 運算式] 方塊中輸入 BookmarkName,將 [ReadInt] 活動的 [BookmarkName] 引數繫結至 [提示] 活動的 [BookmarkName] 引數,然後按兩次 TAB 鍵關閉 [IntelliSense] 清單成員視窗,並儲存屬性。
在 [屬性視窗] 中 [Result] 引數右側的 [輸入 VB 運算式] 方塊中輸入 Result,將 [ReadInt] 活動的 [Result] 引數繫結至 [提示] 活動的 [Result] 引數,然後按兩次 TAB 鍵。
按 F6 建置此方案。