中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

WF:CallExternalMethodActivity

この文書の最新版は
http://naka.wankuma.com/site/column/dotnet/00036.htm


シーケンシャルワークフローコンソールアプリケーションを作成します。

ワークフローが出ます。

ツールボックスの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が使えます。

#長いよ

投稿日時 : 2006年12月6日 0:15

コメントを追加

No comments posted yet.
タイトル
名前
URL
コメント