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

请注意,如果您希望输出参数在取消路径中有效,则可以将根活动包装在 CancellationScope 中,该作用域在 CancellationHandler 中设置 OutArguments。

还要注意,OutArgument 的值反映了该参数在工作流中的状态。也就是说,如果您在活动的中途填充 OutArgument,这些值将反映在 OutArgument 中。这与分配给然后该方法随后引发异常的 C# out 参数一致。

于 2013-01-05T03:03:35.243 回答
0

如果工作流运行良好,您只会获得输出参数。当您取消工作流程时,您是在告诉它不要这样做。如果您需要一种方法在流程中途停止工作流并且它仍然被认为是正常的工作结束,您将需要以某种方式在您的工作流中对此进行建模。通过显式添加逻辑来规避部分活动,或者通过抛出异常并将额外数据添加到抛出的异常中。在后一种情况下,运行时可以检查异常并查看从那里获取数据。

通常,如果这确实是业务流程的一部分,我更喜欢第一种方法。

于 2012-12-12T10:26:02.043 回答