private void ProcessOutputs(WorkflowInstance workflow, WorkflowStep step, IStepBody body, IStepExecutionContext context) { foreach (var output in step.Outputs) { var resolvedValue = output.Source.Compile().DynamicInvoke(body); var data = workflow.Data; var setter = ExpressionHelpers.CreateSetter(output.Target); var targetType = setter.Parameters.Last().Type; var convertedValue = resolvedValue; // We need to make sure the resolvedValue is of the correct type. // However if the targetType is object we don't need to do anything and in some cases Convert.ChangeType will throw. if (targetType != typeof(object)) { convertedValue = Convert.ChangeType(resolvedValue, targetType); } if (setter.Parameters.Count == 2) { setter.Compile().DynamicInvoke(data, convertedValue); } else { setter.Compile().DynamicInvoke(data, context, convertedValue); } } }
private void ProcessOutputs(WorkflowInstance workflow, WorkflowStep step, IStepBody body, IStepExecutionContext context) { foreach (var output in step.Outputs) { var resolvedValue = output.Source.Compile().DynamicInvoke(body); var data = workflow.Data; var setter = ExpressionHelpers.CreateSetter(output.Target); var convertedValue = Convert.ChangeType(resolvedValue, setter.Parameters.Last().Type); if (setter.Parameters.Count == 2) { setter.Compile().DynamicInvoke(data, convertedValue); } else { setter.Compile().DynamicInvoke(data, context, convertedValue); } } }