前回ユニットテストの記事で少し関わっていましたが、ワークフローは引数を通して実行結果や何かしらの値を受取る事が可能です。
ワークフローの実行方法によって結果である引数の受け取り方が異なります。WorkflowInvoker の場合はユニットテストの記事と同様に、WorkflowInvoker.Invoke メソッドの戻り値として取得できます。
1: '結果は IDictionary(Of String, Object) として受け取る
2: Dim result = WorkflowInvoker.Invoke(execActrivity)
3: Console.WriteLine(result("ResultsArgument").ToString)
もう一つ、WorkflowApplication.Run によって実行した場合は、Completed イベントに対する処理として結果を取得できます。
1: Dim wfApps = New WorkflowApplication(execActivity)
2: wfApps.Completed = Sub(e As WorkflowApplicationCompletedEventArgs)
3: If (e.CompletionState <> ActivityInstanceState.Canceled) AndAlso
4: (e.CompletionState <> ActivityInstanceState.Faulted) Then
5: '結果を引数から取得
6: Console.WriteLine(e.Outputs("ResultsArgument").ToString))
7: End If
8: End Sub
9:
10: wfApps.Run
WorkflowInvoker を利用した場合と異なるのは、Completed イベントが発生する条件として「正常終了」「キャンセル」「異常終了」などを含めて「終了」した場合に発生するという点です。そのため正常終了かどうかを判断を行い結果から値を取得する必要があります。
0 件のコメント:
コメントを投稿