このトピックの内容は、Windows Workflow Foundation 4 に該当します。
カスタム複合アクティビティなどのアクティビティの構成のカスタマイズには、カスタム アクティビティ テンプレートが使用されるため、手動で各アクティビティを個別に作成し、そのプロパティおよびその他の設定を構成する必要はありません。このようなカスタム テンプレートは、Windows ワークフロー デザイナーの [ツールボックス] または再ホストされたデザイナーから利用できるようにすることが可能です。ユーザーは、ここから構成済みのデザイン サーフェイスにカスタム テンプレートをドラッグできます。ワークフロー デザイナーには、このようなテンプレートのサンプル (Messaging Activity Designers カテゴリの SendAndReceiveReply Template Designer や ReceiveAndSendReply Template Designer など) が用意されています。
このトピックの最初の手順では、Delay アクティビティのカスタム アクティビティ テンプレートを作成する方法について説明し、2 番目の手順では、ワークフロー デザイナーでカスタム アクティビティ テンプレートを利用できるようにしてカスタム テンプレートが機能することを確認する方法について簡単に説明します。
カスタム アクティビティ テンプレートに IActivityTemplateFactory を実装する必要があります。このインターフェイスには単一の Create メソッドがあり、このメソッドを使用して、テンプレートで使用されるアクティビティ インスタンスを作成および構成できます。
Delay アクティビティのテンプレートを作成するには
Visual Studio 2010 を起動します。
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[プロジェクトの種類] ペインで、プログラミング言語の設定に応じて、[Visual C#] プロジェクトまたは [Visual Basic] グループから [ワークフロー] を選択します。
[テンプレート] ペインで [アクティビティ ライブラリ] をクリックします。
[名前] ボックスに、「DelayActivityTemplate」と入力します。
[場所] テキスト ボックスと [ソリューション名] テキスト ボックスの既定の設定を受け入れ、[OK] をクリックします。
ソリューション エクスプローラーで、DelayActivityTemplate プロジェクトの [参照設定] ディレクトリを右クリックし、[参照の追加] をクリックして [参照の追加] ダイアログ ボックスを開きます。
[.NET] タブに移動し、左側の [コンポーネント名] 列から [PresentationFramework] を選択します。[OK] をクリックして PresentationFramework.dll ファイルへの参照を追加します。
この手順を繰り返して、System.Activities.Presentation.dll ファイルと WindowsBase.dll ファイルへの参照を追加します。
ソリューション エクスプローラーで、DelayActivityTemplate プロジェクトを右クリックして [追加] をポイントし、[新しい項目] をクリックして [新しい項目の追加] ダイアログ ボックスを開きます。
[クラス] テンプレートを選択し、"MyDelayTemplate" という名前を付けて、[OK] をクリックします。
MyDelayTemplate.cs ファイルを開き、次のステートメントを追加します。
//Namespaces added using System.Activities; using System.Activities.Statements; using System.Activities.Presentation; using System.Windows;
次のコードを使用して、
MyDelayActivity
クラスを持つ IActivityTemplateFactory を実装します。これにより、10 秒間の遅延が構成されます。public sealed class MyDelayActivity : IActivityTemplateFactory { public Activity Create(System.Windows.DependencyObject target) { return new System.Activities.Statements.Delay { DisplayName = "DelayActivityTemplate", Duration = new TimeSpan(0, 0, 10) }; } }
[ビルド] メニューの [ソリューションのビルド] をクリックして、DelayActivityTemplate.dll ファイルを生成します。
ワークフロー デザイナーでテンプレートを利用できるようにするには
ソリューション エクスプローラーで、DelayActivityTemplate ソリューションを右クリックして [追加] をポイントし、[新しいプロジェクト] をクリックして [新しいプロジェクトの追加] ダイアログ ボックスを開きます。
[ワークフロー コンソール アプリケーション] テンプレートを選択し、"CustomActivityTemplateApp" という名前を付けて、[OK] をクリックします。
ソリューション エクスプローラーで、CustomActivityTemplateApp プロジェクトの [参照設定] ディレクトリを右クリックし、[参照の追加] をクリックして [参照の追加] ダイアログ ボックスを開きます。
[プロジェクト] タブに移動し、左側の [プロジェクト名] 列から [DelayActivityTemplate] を選択します。[OK] をクリックして、最初の手順で作成した DelayActivityTemplate.dll ファイルへの参照を追加します。
ソリューション エクスプローラーで CustomActivityTemplateApp プロジェクトを右クリックし、[ビルド] をクリックしてアプリケーションをコンパイルします。
ソリューション エクスプローラーで CustomActivityTemplateApp プロジェクトを右クリックして [スタートアップ プロジェクトに設定] をクリックします。
[デバッグ] メニューの [デバッグなしで開始] をクリックして、cmd.exe ウィンドウから要求されたら任意のキーを押して続行します。
Workflow1.xaml ファイルを開き、[ツールボックス] を開きます。
DelayActivityTemplate カテゴリの MyDelayActivity テンプレートを見つけます。デザイン サーフェイスにドラッグします。[プロパティ] ウィンドウで、Duration プロパティが 10 秒に設定されていることを確認します。
例
MyDelayActivity.cs ファイルには次のコードが含まれます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//Namespaces added
using System.Activities;
using System.Activities.Statements;
using System.Activities.Presentation;
using System.Windows;
namespace DelayActivityTemplate
{
public sealed class MyDelayActivity : IActivityTemplateFactory
{
public Activity Create(System.Windows.DependencyObject target)
{
return new System.Activities.Statements.Delay
{
DisplayName = "DelayActivityTemplate",
Duration = new TimeSpan(0, 0, 10)
};
}
}
}