次の方法で共有


DynamicActivity を使用して実行時にアクティビティを作成する

DynamicActivity は、パブリック コンストラクタを持つ具体的でシールされたクラスです。 DynamicActivity は、アクティビティ DOM を使用して実行時にアクティビティ機能をアセンブルするために使用できます。

DynamicActivity 機能

DynamicActivity は実行プロパティ、引数、変数にアクセスできますが、子アクティビティのスケジュール設定や追跡などのランタイム サービスにはアクセスできません。

最上位レベルのプロパティは、ワークフロー Argument オブジェクトを使用して設定できます。 命令型コードでは、これらの引数は新しい型の CLR プロパティを使用して作成されます。 XAML では、 x:Class タグと x:Member タグを使用して宣言されます。

DynamicActivity を使用して構築されたアクティビティは、ICustomTypeDescriptor を使用してデザイナーとやり取りします。 デザイナーで作成されたアクティビティは、次の手順に示すように、 Loadを使用して動的に読み込むことができます。

命令型コードを使用して実行時にアクティビティを作成するには

  1. OpenVisual Studio 2010。

  2. [ファイル]、[新規作成]、[プロジェクト] の順に選択します。 [プロジェクトの種類] ウィンドウの [Visual C#] で [ワークフロー 4.0] を選択し、v2010 ノードを選択します。 [テンプレート] ウィンドウで [シーケンシャル ワークフロー コンソール アプリケーション] を選択します。 新しいプロジェクトに DynamicActivitySample という名前を付けます。

  3. HelloActivity プロジェクトで Workflow1.xaml を右クリックし、[削除] を選択 します

  4. Program.cs を開きます。 ファイルの先頭に次のディレクティブを追加します。

    using System.Collections.Generic;
    
  5. Main メソッドの内容を次のコードに置き換えます。このコードにより、1 つのSequence アクティビティを含むWriteLine アクティビティが作成され、新しい動的アクティビティのImplementation プロパティに割り当てられます。

    //Define the input argument for the activity
    var textOut = new InArgument<string>();
    //Create the activity, property, and implementation
                Activity dynamicWorkflow = new DynamicActivity()
                {
                    Properties =
                    {
                        new DynamicActivityProperty
                        {
                            Name = "Text",
                            Type = typeof(InArgument<String>),
                            Value = textOut
                        }
                    },
                    Implementation = () => new Sequence()
                    {
                        Activities =
                        {
                            new WriteLine()
                            {
                                Text = new InArgument<string>(env => textOut.Get(env))
                            }
                        }
                    }
                };
    //Execute the activity with a parameter dictionary
                WorkflowInvoker.Invoke(dynamicWorkflow, new Dictionary<string, object> { { "Text", "Hello World!" } });
                Console.ReadLine();
    
  6. アプリケーションを実行します。 "Hello World!" というテキストが表示されたコンソール ウィンドウ。

XAML を使用して実行時にアクティビティを作成するには

  1. Visual Studio 2010 を開きます。

  2. [ファイル]、[新規作成]、[プロジェクト] の順に選択します。 [プロジェクトの種類] ウィンドウの [Visual C#] で [ワークフロー 4.0] を選択し、v2010 ノードを選択します。 [テンプレート] ウィンドウで [ワークフロー コンソール アプリケーション] を選択します。 新しいプロジェクトに DynamicActivitySample という名前を付けます。

  3. HelloActivity プロジェクトで Workflow1.xaml を開きます。 デザイナーの下部にある [引数 ] オプションをクリックします。 In型のTextToWriteと呼ばれる新しいString引数を作成します。

  4. ツールボックスの [プリミティブ] セクションからデザイナー画面に WriteLine アクティビティをドラッグします。 アクティビティの TextToWrite プロパティに値を割り当てます。

  5. Program.cs を開きます。 ファイルの先頭に次のディレクティブを追加します。

    using System.Activities.XamlIntegration;
    
  6. Main メソッドの内容を次のコードに置き換えます。

    Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml");
                    results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } });
    Console.ReadLine();
    
  7. アプリケーションを実行します。 "Hello World!" というテキストが表示されたコンソール ウィンドウが表示されます。

  8. ソリューション エクスプローラーで Workflow1.xaml ファイルを右クリックし、[コードの表示] を選択します。 アクティビティ クラスは x:Class で作成され、プロパティは x:Property で作成されることに注意してください。

こちらも参照ください