Dynamics crm Dynamics 365+自定义工作流+实体引用的Id和键属性不能为空

Dynamics crm Dynamics 365+自定义工作流+实体引用的Id和键属性不能为空,dynamics-crm,dynamics-crm-online,dynamics-crm-365,Dynamics Crm,Dynamics Crm Online,Dynamics Crm 365,我有两个自定义工作流。一个的输出成为另一个的输入 在调用第一个自定义工作流并在另一个步骤中使用其输出后,它会显示错误: “无效参数”错误-实体引用的Id和键属性不能为空 第一个工作流程的代码- 公共类RetrieveCaseForUnit:WorkFlowActivityBase { 区域输入参数 [输入单位] [参考目标msdyn\u customerasset.EntityLogicalName] 公共非语法单位{get;set;} 端区 区域输出参数 [输出案例] [ReferenceTa

我有两个自定义工作流。一个的输出成为另一个的输入

在调用第一个自定义工作流并在另一个步骤中使用其输出后,它会显示错误:

“无效参数”错误-实体引用的Id和键属性不能为空

第一个工作流程的代码-

公共类RetrieveCaseForUnit:WorkFlowActivityBase { 区域输入参数 [输入单位] [参考目标msdyn\u customerasset.EntityLogicalName] 公共非语法单位{get;set;} 端区 区域输出参数 [输出案例] [ReferenceTargetIncident.EntityLogicalName] 公共输出参数案例{get;set;} 端区 公共重写无效ExecuteCRMWorkFlowActivityCodeActivityContext executionContext,LocalWorkflowContext crmWorkflowContext { 尝试 { 如果crmWorkflowContext==null { 抛出新ArgumentNullExceptioncrmWorkflowContext为null; } crmWorkflowContext.TraceGetting单元输入; EntityReference unitRef=Unit.GetexecutionContext; 如果unitRef==null { crmWorkflowContext.TraceError消息:未提供单位值; 未提供抛出新ArgumentNullExceptionUnit值; } EntityReference caseRef=GetCasecrmWorkflowContext,unitRef; 如果caseRef!=null { Case.SetexecutionContext,caseRef; } 其他的 { Case.SetexecutionContext,null; } } 捕获异常 { 抛出新的InvalidWorkflowException; } } 私有静态EntityReference GetCaseLocalWorkflowContext crmWorkflowContext,EntityReference unitRef { EntityReference caseRef=null; CrmServiceContext serviceContext=新的CrmServiceContextcrmWorkflowContext.OrganizationService; var caseRecord=来自serviceContext.IncidentSet中的currentcase 其中currentcase.gsscore_Unitid.Id==unitRef.Id &¤tcase.gsscore_CaseTypeId.Id==新的GUI D3A152B94-D2DF-E711-A94A-000D3A30DB97 orderby currentcase.CreatedOn降序 选择currentcase.FirstOrDefault; crmWorkflowContext.TraceCase记录+案例记录; 如果casecord!=null caseRef=caseRecord.ToEntityReference; 返回caseRef; } } 第二工作流程代码-

公共类NMSGetWorkOrderForCase:WorkFlowActivityBase { 区域输入参数 [Inputgsscore\u nmsmessage.Fields.gsscore\u CaseId] [ReferenceTargetIncident.EntityLogicalName] 公共InArgument案例{get;set;} 端区 区域输出参数 [Outputgsscore\u nmsmessage.Fields.WorkOrder] [参考目标msdyn\u workorder.EntityLogicalName] 公共输出参数NMSWorkOrder{get;set;} 端区 公共重写无效ExecuteCRMWorkFlowActivityCodeActivityContext executionContext,LocalWorkflowContext crmWorkflowContext { 如果crmWorkflowContext==null { 抛出新ArgumentNullExceptioncrmWorkflowContext为Null; } 如果Case.GetexecutionContext==null { crmWorkflowContext.UserId=crmWorkflowContext.WorkflowExecutionContext.UserId; 抛出新的InvalidWorkflowException; } crmWorkflowContext.TraceStart; Guid caseId=Case.GetexecutionContext.Id; 尝试 { CrmServiceContext serviceContext=新的CrmServiceContextcrmWorkflowContext.OrganizationService; var WorkOrderRecord=来自serviceContext.msdyn\u workorderSet中的Currentworkder 其中currentworkider.msdyn_ServiceRequest.Id==caseId orderby currentworkider.CreatedOn 选择currentworkider.Id .ToList.FirstOrDefault; 如果WorkOrderRecord!=空 { EntityReference workorderRef=新的EntityReferencemsdyn\u workorder.EntityLogicalName,WorkOrderRecord; NMSWorkOrder.SetexecutionContext,workorderRef; } } 捕获异常 { crmWorkflowContext.TracingService.TraceCase记录不存在。+crmWorkflowContext.WorkflowExecutionContext.MessageName+ex.Message; 如果crmWorkflowContext.ErrorCode==null { crmWorkflowContext.ErrorCode=intWorkflowActivityErrorCode.NMSGetWorkOrderForCaseError.ToString; } crmWorkflowContext.UserId=crmWorkflowContext.WorkflowExecutionContext.UserId; 抛出新的InvalidWorkflowException; } } }
WorkOrderRecord记录是一个GUID。我
不能为空。如果工作记录!=null应更改为if WorkOrderRecord!=Guid.Empty

如果这是作为工作流中调用的自定义操作注册的,则可能是您已根据需要指定了输出entityreference参数,但您的工作流返回null。检查是否需要任何操作输出变量。如果是这样,请将它们设置为可选、保存、发布、更新插件,然后再试一次。这为我修正了错误。问题不在于代码,而在于期望返回某些内容的操作

你确定第一个工作流实际上提供了一个输出吗?为什么不一步一步地进行,比如删除第二个具有第二个WF活动的第二个步骤,调试第一个WF活动以查看caseRecord和caseRef中会出现什么?Trace应该已经告诉你一些想法了。。?