次の方法で共有


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

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

DynamicActivity 機能

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

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

ICustomTypeDescriptorを使用してデザイナーとのインターフェイスDynamicActivity使用して構築されたアクティビティ。 デザイナーで作成されたアクティビティは、次の手順に示すように、 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 つのWriteLine アクティビティを含むSequence アクティビティが作成され、新しい動的アクティビティの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 を開きます。 デザイナーの下部にある [引数 ] オプションをクリックします。 String型のTextToWriteと呼ばれる新しいIn引数を作成します。

  4. ツールボックスの [プリミティブ] セクションからデザイナー画面に WriteLine アクティビティをドラッグします。 アクティビティの Text プロパティに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 で作成されることに注意してください。

こちらも参照ください