【问题标题】:Dynamics CRM Plugin - LINQ Query in 'Pre Validation'Dynamics CRM 插件 - “预验证”中的 LINQ 查询
【发布时间】:2014-10-29 02:15:06
【问题描述】:

我在“预验证”中注册了一个 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 插件错误: System.Reflection.TargetInvocationException:已引发异常 通过调用的目标。 ---> System.ArgumentNullException: 值不能为空。参数名称:g

我不确定为什么会出现上述错误,以及非活动子记录和父记录之间的链接是否在 LINQ 查询中损坏或有其他原因。

【问题讨论】:

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


    【解决方案1】:

    首先,请确保所有子记录都参考了父记录。 然后,将您的 where 条件更改为:

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

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

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

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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      相关资源
      最近更新 更多