引数を渡す場合は、このような形で Dictionary を作成し WorkflowApplication や WorkflowInvoker に引き渡します。詳しく調査していないのですが、恐らく WorkflowApplication.HostEnvironment を通しても同様にアクセスできるのではないかな、と思っていますが試していませんw1: '入力引数の設定
2: Dim inArgs As New Dictionary(Of String, Object)3: inArgs.Add([引数名], Value)4:5: Dim wfApps As New WorkflowApplication(wfFile, inArgs)
反対に結果を受け取る場合のロジックは次のようになります。
WorkflowApplication の場合は非同期で実行されますので上記のように Completed イベントをトラップ、そのイベントにて渡ってくる WorkflowApplicationCompletedEventArgs より結果を取得します。WorkflowInvoker を利用しての実行では、WorkflowInvoker.Invoke メソッドの戻り値として Dictionary が返却されてきますのでそこから取得します。1: 'WorkflowApplication が実行終了するまで待機状態にする
2: Private syncEvent As New AutoResetEvent(False)3:4: 'WorkflowApplication の Completed イベントをトラップする
5: wfApps.Completed = AddressOf Completed
6:7: 'Completed イベント
8: Private Sub Completed(ByVal e As WorkflowApplicationCompletedEventArgs)9:10: If Not ((e.CompletionState = ActivityInstanceState.Canceled) OrElse11: (e.CompletionState = ActivityInstanceState.Faulted)) Then
12: '正常終了時に結果を取得する
13: If e.Outputs.ContainsKey([引数名]) Then14: wfResult = e.Outputs([引数名]).ToString15: End If16: End If17:18: syncEvent.Set()
19: End Sub
あとはデザイナ上での引数設定ですが、このような形になります。
起動時に受け取る引数の方向を「入力」に、結果として返却する引数の方向を「出力」にするだけです。
0 件のコメント:
コメントを投稿