InvokeMethod アクティビティは、直接メソッドを呼び出し実行する事ができるアクティビティです。極端な事を言えば、これが使えると基本的になんでもできる、と思ってもよいくらいで。ただし少々利用時の設定に癖があります。
今回のサンプルはこのようなワークフローとなります。前半部分では静的クラスのメソッドを呼び出すタイプ、後半は通常のクラスメソッドを呼び出すタイプとなっています。呼び出されるメソッドは次のように作成しました。
1: Public Class InvokeSample2:3: Public Function TestMethod() As String4: Return "Invoke サンプル用メソッドからの戻りです"5: End Function6:7: End Class8:9: Public Module InvokeSampleModule10:11: Public Function TestMethod() As String12: Return "Invoke サンプル用メソッドからの戻りです" + ControlChars.NewLine + "これは Shared メソッドです"13: End Function14:15: End Module
VB なので静的クラスは Module を利用します。
まず静的クラスメソッドを呼び出す場合は、InvokeMethod アクティビティに次のような設定を行います。
- TargetType:InvokeSampleModule
- TargetObject:(設定なし)
- MethodName:TestMethod
戻り値を受け取る変数は別途定義しておきます。
そして通常クラスのメソッドを呼び出す場合は次のように設定します。
- TargetType:InvokeSample
- TargetObject:(設定なし)
- MethodName:TestMethod
InvokeMethod アクティビティ自体の設定はこのように静的であろうと通常であろうと変わりありません。違いは InvokeMethod アクティビティの前にあります。静的クラスでしたら特に気にしませんが、通常のクラスの場合、あらかじめインスタンス生成を行っておく必要があります。ワークフロー上ではインスタンス生成を直前の Assign アクティビティにて行っています。通常のプログラミングと全く同じことをワークフロー上でも行う形になります。
なお、TargetType プロパティでは「型の参照」を選択する事ができ、別ダイアログにて利用できるクラスを指定する事が出来るようになっています。
このようなダイアログです。これ自体も WF で標準提供されている機能だったりします。
デザイナーを使ってパラメーターを渡す方法ごご存知ですかぁ? ググってもなかなか見つけられない・・・。Parametersのコレクションに指定してもなんか明示的にメソッドの引数の名前と関連させないといけないらしく、エラーが出ます。
返信削除おとといぐらいからWF4いじりだしたんで初心者です。他の記事も参考にさせていただきます。
追記:分かりました。根本的に理解してなかった。トップレベルのActivityのスコープにVariableをいくつか指定して、それにあらかじめ値を入れて、別のInvokeMethodにその値を渡したいときはデザイナーのParameters画面の一番右のカラム(値)のところにVariableの名前を指定すればよいだけでした。お騒がせしました。
返信削除コメントありがとうございます!
返信削除デザイナ上で設定している場合、変数も引数もスコープが関係してくるのですよね。そしてここを時々間違ってしまう事があったりします。各アクティビティのDisplayNameプロパティを意識して設定していると、結構防げますよね。
Wf4をさわりはじめたばかりとの事ですが、是非とも色々いじくってみてください。私もまだまだ勉強途中ですので間違いも多いです。そのあたりを指摘くださると非常に有難く思います。