2011年4月14日木曜日

InvokeMethod アクティビティによるメソッド呼び出し

InvokeMethod アクティビティは、直接メソッドを呼び出し実行する事ができるアクティビティです。極端な事を言えば、これが使えると基本的になんでもできる、と思ってもよいくらいで。ただし少々利用時の設定に癖があります。

Invoke1

今回のサンプルはこのようなワークフローとなります。前半部分では静的クラスのメソッドを呼び出すタイプ、後半は通常のクラスメソッドを呼び出すタイプとなっています。呼び出されるメソッドは次のように作成しました。

  1: Public Class InvokeSample
  2: 
  3:     Public Function TestMethod() As String
  4:         Return "Invoke サンプル用メソッドからの戻りです"
  5:     End Function
  6: 
  7: End Class
  8: 
  9: Public Module InvokeSampleModule
 10: 
 11:     Public Function TestMethod() As String
 12:         Return "Invoke サンプル用メソッドからの戻りです" + ControlChars.NewLine + "これは Shared メソッドです"
 13:     End Function
 14: 
 15: End Module


VB なので静的クラスは Module を利用します。



まず静的クラスメソッドを呼び出す場合は、InvokeMethod アクティビティに次のような設定を行います。




  • TargetType:InvokeSampleModule


  • TargetObject:(設定なし)


  • MethodName:TestMethod



戻り値を受け取る変数は別途定義しておきます。

そして通常クラスのメソッドを呼び出す場合は次のように設定します。




  • TargetType:InvokeSample


  • TargetObject:(設定なし)


  • MethodName:TestMethod



InvokeMethod アクティビティ自体の設定はこのように静的であろうと通常であろうと変わりありません。違いは InvokeMethod アクティビティの前にあります。静的クラスでしたら特に気にしませんが、通常のクラスの場合、あらかじめインスタンス生成を行っておく必要があります。ワークフロー上ではインスタンス生成を直前の Assign アクティビティにて行っています。通常のプログラミングと全く同じことをワークフロー上でも行う形になります。



なお、TargetType プロパティでは「型の参照」を選択する事ができ、別ダイアログにて利用できるクラスを指定する事が出来るようになっています。



invoke3



このようなダイアログです。これ自体も WF で標準提供されている機能だったりします。

3 件のコメント:

  1. デザイナーを使ってパラメーターを渡す方法ごご存知ですかぁ? ググってもなかなか見つけられない・・・。Parametersのコレクションに指定してもなんか明示的にメソッドの引数の名前と関連させないといけないらしく、エラーが出ます。
    おとといぐらいからWF4いじりだしたんで初心者です。他の記事も参考にさせていただきます。

    返信削除
  2. 追記:分かりました。根本的に理解してなかった。トップレベルのActivityのスコープにVariableをいくつか指定して、それにあらかじめ値を入れて、別のInvokeMethodにその値を渡したいときはデザイナーのParameters画面の一番右のカラム(値)のところにVariableの名前を指定すればよいだけでした。お騒がせしました。

    返信削除
  3. コメントありがとうございます!

    デザイナ上で設定している場合、変数も引数もスコープが関係してくるのですよね。そしてここを時々間違ってしまう事があったりします。各アクティビティのDisplayNameプロパティを意識して設定していると、結構防げますよね。

    Wf4をさわりはじめたばかりとの事ですが、是非とも色々いじくってみてください。私もまだまだ勉強途中ですので間違いも多いです。そのあたりを指摘くださると非常に有難く思います。

    返信削除