アクティビティを作成する方法

このトピックの内容は、Windows Workflow Foundation 4 に該当します。

アクティビティは WF の動作の中心的な単位です。アクティビティの実行ロジックはマネージ コードで実装できます。または他のアクティビティを使用して実装できます。ここでは、実行ロジックを実装するコードを使用した単純アクティビティと、他のアクティビティを使用して実装を定義したアクティビティを作成する方法について説明します。これらのアクティビティは、トピック「ワークフローを作成する方法」および「ワークフローを実行する方法」で使用されます。

アクティビティ ライブラリ プロジェクトを作成するには

  1. Visual Studio 2010 を開き、[ファイル] メニューの [新規作成][プロジェクト] をクリックします。

  2. [インストールされているテンプレート] リストで [その他のプロジェクトの種類] ノードを展開し、[Visual Studio ソリューション] を選択します。

  3. [Visual Studio ソリューション] リストで [空のソリューション] を選択します。.NET Framework バージョンのドロップダウン リストで [.NET Framework 4] が選択されていることを確認します。[名前] ボックスに「GettingStartedTutorial」と入力し、[OK] をクリックします。

  4. ソリューション エクスプローラー[GettingStartedTutorial] を右クリックし、[追加][新しいプロジェクト] をクリックします。

    Dd489453.Tip(ja-jp,VS.100).gifヒント :
    ソリューション エクスプローラー ウィンドウが表示されない場合は、[表示] メニューの [ソリューション エクスプローラー] をクリックします。

  5. [インストールされているテンプレート] ボックスで [Visual C#][ワークフロー] (または [Visual Basic][ワークフロー]) を選択します。.NET Framework バージョンのドロップダウン リストで [.NET Framework 4] が選択されていることを確認します。[ワークフロー] リストで [アクティビティ ライブラリ] を選択します。既定の設定をそのままにし、[OK] をクリックします。

    Dd489453.note(ja-jp,VS.100).gif注 :
    Visual Studio で第一言語として設定されているプログラミング言語に応じて、[インストールされているテンプレート] ボックスの [他の言語] ノードの下に、[Visual C#] ノードまたは [Visual Basic] ノードが表示されます。

  6. ソリューション エクスプローラーActivity1.xaml を右クリックし、[削除] をクリックします。[OK] をクリックして確定します。

ReadInt アクティビティを作成するには

  1. [プロジェクト] メニューの [新しい項目の追加] をクリックします。

  2. [インストールされているテンプレート] リストで、[ワークフロー] を選択します。[ワークフロー] リストで [コード アクティビティ] を選択します。

  3. [名前] ボックスに「ReadInt」と入力し、[追加] をクリックします。

  4. 既存の 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));
        }
    }
    
    Dd489453.note(ja-jp,VS.100).gif注 :
    ReadInt アクティビティは、コード アクティビティに基づくアクティビティ プロジェクトの既定である CodeActivity ではなく NativeActivity から派生します。アクティビティが単一の結果を提供する場合、CodeActivity を使用できます。結果は Result 引数を介して公開されますが、CodeActivity はブックマークの使用をサポートしないため、NativeActivity が使用されます。

Prompt アクティビティを作成するには

  1. F6 キーを押して、プロジェクトをビルドします。その結果、このプロジェクトの ReadInt アクティビティが有効になり、この手順からカスタム アクティビティのビルドに使用できます。

  2. [プロジェクト] メニューの [新しい項目の追加] をクリックします。

  3. [インストールされているテンプレート] リストで、[ワークフロー] を選択します。[ワークフロー] リストで [アクティビティ] を選択します。

  4. [名前] ボックスに「Prompt」と入力し、[追加] をクリックします。

  5. ソリューション エクスプローラーPrompt.xaml をダブルクリックし、デザイナーにワークフローを表示します (まだ表示されていない場合)。

  6. アクティビティ デザイナーの左下にある [引数] をクリックし、[引数] ペインを表示します。

  7. [引数の作成] をクリックします。

  8. [名前] ボックスに「BookmarkName」と入力し、[方向] ボックスで [IN] を選択して、[引数の型] ボックスで [String] を選択し、Enter キーを押して引数を保存します。

  9. [引数の作成] をクリックします。

  10. 新しく追加した BookmarkName 引数の下にある [名前] ボックスに「Result」と入力し、[方向] ボックスで [OUT] を選択して、[引数の型] ドロップダウン リストで [Int32] を選択し、Enter キーを押します。

  11. [引数の作成] をクリックします。

  12. [名前] ボックスに「Text」と入力し、[方向] ボックスで [IN] を選択して、[引数の型] ボックスで [String] を選択し、Enter キーを押して引数を保存します。

    これら 3 つの引数は、次の手順で、Prompt アクティビティに追加される WriteLine アクティビティと ReadInt アクティビティの対応する引数にバインドされます。

  13. アクティビティ デザイナーの左下にある [引数] をクリックし、[引数] ペインを閉じます。

  14. [ツールボックス][制御フロー] セクションから Sequence アクティビティをドラッグし、アクティビティ デザイナーにドロップします。

    Dd489453.Tip(ja-jp,VS.100).gifヒント :
    [ツールボックス] ウィンドウが表示されていない場合は、[表示] メニューの [ツールボックス] をクリックします。

  15. [ツールボックス][プリミティブ] セクションから WriteLine アクティビティをドラッグし、Sequence アクティビティにドロップします。

  16. [プロパティ] ウィンドウの [VB の式を入力してください] ボックスに「Text」と入力して、WriteLine アクティビティの Text 引数を Prompt アクティビティの Text 引数にバインドします。次に Tab キーを 2 回押して IntelliSense リスト メンバー ウィンドウを閉じ、プロパティから選択を外してプロパティ値を保存します。このプロパティは、アクティビティ自体の [VB の式を入力してください] に「Text」を入力して設定することもできます。

    Dd489453.Tip(ja-jp,VS.100).gifヒント :
    [プロパティ] ウィンドウが表示されていない場合は、[表示] メニューの [プロパティ ウィンドウ] を選択します。

  17. ツールボックス[ActivityLibrary1] セクションから ReadInt アクティビティをドラッグし、WriteLine アクティビティの後になるように Sequence アクティビティにドロップします。

  18. [プロパティ] ウィンドウで BookmarkName 引数の右にある [VB の式を入力してください] ボックスに「BookmarkName」と入力して、ReadInt アクティビティの BookmarkName 引数を Prompt アクティビティの BookmarkName 引数にバインドします。次に Tab キーを 2 回押して IntelliSense リスト メンバー ウィンドウを閉じ、プロパティを保存します。

  19. [プロパティ] ウィンドウの Result 引数の右にある [VB の式を入力してください] ボックスに「Result」と入力して、ReadInt アクティビティの Result 引数を Prompt アクティビティの Result 引数にバインドします。次に Tab キーを 2 回押します。

  20. F6 キーを押してソリューションをビルドします。

参照

処理手順

ワークフローを作成する方法

リファレンス

CodeActivity
NativeActivity

概念

カスタム アクティビティの設計と実装

その他のリソース

チュートリアル入門