此工作流无法运行,因为父工作流提供的参数与链接子工作流中的指定参数不匹配

时间:2017-09-07 15:04:14

标签: c# dynamics-crm

我试图从我的C#代码调用动态CRM工作流程。我的工作流程需要来自我的C#代码的参数。我正在使用流动的代码:

var workflowInfo = result.Entities.FirstOrDefault();
if (workflowInfo != null)
{
InputArgumentCollection inputParameters = new InputArgumentCollection();

EntityReference reference = new EntityReference();
reference.Id = paymentRunID;
reference.Name = "paymentrunid";
reference.LogicalName = "paymentrun";                    
inputParameters.Add("InputPaymentRunID", reference);

inputParameters.Add("InputPaymentDueDate", paymentRunPayDate);

OptionSetValue opt = new OptionSetValue();
opt.Value = region;
inputParameters.Add("InputRegion", opt);

var request = new ExecuteWorkflowRequest();
request.WorkflowId = workflowInfo.GetAttributeValue<Guid>("workflowid"); //ID of the workflow to execute
request.EntityId = paymentRunID; //ID of the record on which the workflow executes                    
request.InputArguments = inputParameters;

ServerConnection.CrmService.Execute(request);
return true;
}

我的CRM工作流程代码是:

[RequiredArgument]
[Input("EntityReference input")]
[ReferenceTarget("paymentrun")]
public InArgument<EntityReference> InputPaymentRunID { get; set; }

[Input("DateTime input")]
public InArgument<DateTime> InputPaymentDueDate { get; set; }

[Input("OptionSetValue input")]
[Default("1")]
[AttributeTarget("paymentrun", "lregion")]
public InArgument<OptionSetValue> InputRegion { get; set; } 

当我运行我的C#代码时,它已成功执行并返回true但在我的动态CRM工作流方面我收到以下错误:

This workflow cannot run because arguments provided by parent workflow does not match with the specified parameters in linked child workflow. Check the child workflow reference in parent workflow and try running this workflow again.

Unhandled Exception: Microsoft.Crm.CrmException: This workflow cannot run because arguments provided by parent workflow does not match with the specified parameters in linked child workflow. Check the child workflow reference in parent workflow and try running this workflow again.
at Microsoft.Crm.Workflow.Services.InputArgumentValidator.VerifyAndFilterInputParametersSupplied(Dictionary`2 inputArguments, Dictionary`2 childParameters)
at Microsoft.Crm.Workflow.ActivityHostBase.FetchInputArguments(ICommonWorkflowContext context)
at Microsoft.Crm.Workflow.ActivityHost.StartWorkflowExecution(Activity workflow, ICommonWorkflowContext context)
at Microsoft.Crm.Workflow.ActivityHostBase.StartWorkflow(ICommonWorkflowContext context, Activity preLoadedActivity)

C#代码或工作流代码有什么问题。

1 个答案:

答案 0 :(得分:0)

我假设你没有在这里使用XAML workflow

我认为您已将工作流程与自定义工作流程活动(CWA)混淆,即便如此,我认为您的设计可能不对。

工作流是使用工作流设计器通过CRM用户界面配置的流程。工作流程包含许多步骤。系统事件和ExecuteWorkflowRequest调用可以触发工作流程。

CWA是一段代码,您可以将其打包并作为一个步骤放在流程中。 CWA只能通过流程触发。您无法使用ExecuteWorkflowRequest来直接访问CWA。您需要设计一个流程,然后将CWA作为一个步骤添加到其中,通过工作流设计器传递输入。

您的实现建议您创建一个端点,您可以传递参数,然后运行一些自定义代码。在这种情况下,工作流程无论如何都无法工作 - 它无法接收输入(我怀疑是错误的原因)。您应该考虑一个允许定义输入参数的操作(另一个type进程)。该操作也是使用工作流设计器实现的,因此您可以调用CWA,然后通过操作传递参数。