.NET3.0:WF:CallExternalMethodActivity
2006/12/11
この文書はVisual Studio 2005 TS + Windows Vista RC2 + .NET Framework 3.0 RTMで作成されています。
シーケンシャルワークフローコンソールアプリケーションを作成します。
ワークフローが出ます。
ツールボックスのCallExternalMethodを
ドラッグアンドドロップします。
適当にインターフェイスを作成し、System.Workflow.Activities.ExternalDataExchange属性を付けます。(ここがポイント1!!!)
ついでに実装クラスも作成しておきます。
namespace WorkflowLibrary1 { [System.Workflow.Activities.ExternalDataExchange] public interface IAdd { int Add( int x, int y ); } class Class1: IAdd { #region IAdd メンバ public int Add(int x, int y) { return x + y; } #endregion } }
アクティビティを選択して、InterfaceTypeで参照ボタンをクリックすると
型の参照と選択ウィンドウが開くので、IAddを選択します。
続いてMethodNameを設定します。
パラメータが自動で出てきます。
xとyと(ReturnValue)を設定するのですが、今回はすべて新規でプロパティを作成しました。
実装クラスの登録を行います。
System.Workflow.Activities.ExternalDataExchangeService edx = new System.Workflow.Activities.ExternalDataExchangeService(); workflowRuntime.AddService(edx); edx.AddService(new WorkflowLibrary1.Class1());
ここがポイント2!!!
- 実装クラスとInterfaceの関連付けは不要
- 1インターフェイスに登録できる実装クラスは1つのみ(2つ目で落ちる)
- ワークフローランタイムにサービス登録をしてから、edxにサービス登録をする(逆にすると2行目で落ちる)
これでOKですが、確認のためのコードを以下のようにしました。
前後にデータセットと、出力用のコードアクティビティを設定して、
private void codeActivity1_ExecuteCode(object sender, EventArgs e) { this.callExternalMethodActivity1_x1 = 10; this.callExternalMethodActivity1_y1 = 20; } private void codeActivity2_ExecuteCode(object sender, EventArgs e) { Console.WriteLine(this.callExternalMethodActivity1__ReturnValue_1.ToString()); Console.ReadLine(); }
このようにして実行します。
以上で、CallExternalMethodActivityが使えます。