0

In/Out 引数を持つワークフローがあり、WorkflowApplicationCompletedEventArgs.Outputs でそれを取得できません。

私は2つの引数を持っています:

  DataParams which is In/Out
  ClassParams which is In

私はこのようにワークフローを呼び出しています:

  IDictionary<string, object> inParams = new Dictionary<string, object>
  {
    {"DataParams", _dataParameters },
    {"ClassParams", _classParameters },
  };


  workflowApp = new WorkflowApplication(new actSendToClient(), inParams);
  workflowApp.Completed = e => SendToClientWorkflowCompleted(e);
  workflowApp.Run();

しばらくして、ユーザーがホストでこのメソッドをキャンセルすると、次のメソッドが呼び出されます。

workflowApp.Cancel();

委任されたメソッドにルーティングします。

public void SendToClientWorkflowCompleted(WorkflowApplicationCompletedEventArgs e)
{
    var output = e.Outputs;
}

e.Outputs には何も表示されません。私は何を間違っていますか?

4

2 に答える 2

0

ワークフローが適切に実行された場合にのみ、出力引数を取得します。そして、ワークフローをキャンセルするときは、そうしないように言っています。プロセスの途中でワークフローを停止する方法が必要であり、それでも通常のジョブの終了と見なされる場合は、ワークフローでこれを何らかの方法でモデル化する必要があります。アクティビティの一部を回避するロジックを明示的に追加するか、例外をスローして、スローされた例外に追加のデータを追加します。後者の場合、ランタイムは例外をチェックし、そこからデータを取得することを確認できます。

これが本当にビジネスプロセスの一部である場合、通常、私は最初のアプローチを好みます。

于 2012-12-12T10:26:02.043 に答える
0

キャンセル パスで出力引数を有効にする場合は、CancellationHandler で OutArguments を設定する CancellationScope でルート アクティビティをラップできます。

もう 1 つ注意してください。OutArgument の値は、ワークフロー内のその引数の状態を反映します。つまり、アクティビティの途中で OutArgument を設定すると、それらの値が OutArgument に反映されます。これは、C# の out 引数が割り当てられ、その後メソッドが例外をスローすることと一致しています。

于 2013-01-05T03:03:35.243 に答える