我有一个带有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中什么都没得到。我做错了什么?
答案 0 :(得分:0)
如果工作流程运行良好,您只能获得输出参数。当您取消工作流程时,您告诉它不会这样做。如果您需要一种方法在流程中途停止工作流程并且它仍然被视为正常的工作结束,您将需要以某种方式在您的工作流程中对此进行建模。通过显式添加逻辑来规避部分活动,或者通过抛出异常并将额外数据添加到抛出的异常中。在后一种情况下,运行时可以检查异常并查看从那里获取数据。
如果这真的是业务流程的一部分,我通常更喜欢第一种方法。
答案 1 :(得分:0)
请注意,如果您希望输出参数在取消路径中有效,则可以将根活动包装在CancellationScope中,该CancellationScope在CancellationHandler中设置OutArguments。
还有一点需要注意,OutArgument的值反映了工作流中该参数的状态。也就是说,如果您在活动中途填充OutArgument,那么这些值将反映在OutArgument中。这与分配给的C#out参数一致,然后该方法抛出异常。