Dynamics CRM插件 - 预验证中的LINQ查询'

时间:2014-10-29 02:15:07

标签: dynamics-crm-2011 dynamics-crm-2013

我在"预验证"中注册了一个Dynamics CRM插件。并在删除时触发。 我在其中有一个LINQ查询,它检索特定父记录的子记录的日期字段的最大值。

这是我的代码:

var q = (from e1 in serviceContext.CreateQuery<entity1>()
       join e2 in serviceContext.CreateQuery<entity2>() on e1.typeid.Id equals e2.codeId
       where e1.statecode == 0 && e1.ParentId.Id.Equals(new Guid(ParentGuidStr))
       orderby e1.dt descending
       select new {e1.dt, e2.code}).ToList();

我在上面的查询中收到以下错误当插件触发的记录是INACTIVE:

  

PreValidateEntity1Delete PlugIn错误:   System.Reflection.TargetInvocationException:抛出了异常   通过调用的目标。 ---&GT; System.ArgumentNullException:   值不能为空。参数名称:g

我不知道为什么我收到上述错误,并且如果在LINQ查询中,非活动子记录和父记录之间的链接断开,或者还有其他原因。

1 个答案:

答案 0 :(得分:2)

首先,请确保所有儿童记录都参考父记录。 然后,将你所在的地方改为:

where e1.statecode == 0 && e1.ParentId != null && e1.ParentId.Id.Equals(new Guid(ParentGuidStr))

问题是EntityReference字段(e1.ParentId)可能为null,当您尝试访问null实体时,会出现错误。

然后因此,您还应该确保e1.typeid在连接条件中也不为空。

或者,您可以尝试使用2个单独的查询进行解决方法,并从结果中收集信息。

祝你好运!