【问题标题】:System.Collections.Generic.KeyNotFoundException Dynamics CRM C# lookup field errorSystem.Collections.Generic.KeyNotFoundException Dynamics CRM C# 查找字段错误
【发布时间】:2019-04-16 15:58:06
【问题描述】:

我正在尝试使用 C# 在 Dynamics CRM 中创建新记录。

下面是我正在使用的代码:

 Entity Record = new Entity("new_edRecord");
 Record["new_year"] = "2100";
 Record["new_school"] = new EntityReference("new_school",new Guid("8ba53949-3947-e445-876c-001dd8b71c19"));
 Record["new_gradelevel"] = "100000018";
 organizationProxy.Create(Record);

执行此操作时,出现以下错误:

插件意外异常(执行): Department.EdRecord.RecordCreate: System.Collections.Generic.KeyNotFoundException:给定的密钥不是 出现在字典中。

我通过访问以下网址仔细检查了是否存在具有 GUID 的学校:

https://crm.site.com/orgname/api/data/v8.0/new_schools(8ba53949-3947-e445-876c-001dd8b71c19)

这带来了一个结果。不确定我在这里缺少什么。

【问题讨论】:

  • 您是否设置了任何断点以查看示例中哪一行失败?提供的 URL 使用“new_schools”,而您使用的是“new_school”
  • 是的,如果我添加 new_school 会失败。这是一个必填字段,因此需要指定。并且 new_schools 用于上层,因为 CRM 使用复数名称作为 rest api
  • 我敢打赌“new_school”是当时不存在的键,或者如果它是必填字段,它可能是插入生成的标识列,因此您是不允许给它一个值?
  • 问题可能出在您的 OptionSet 值上吗?您已经设置了Record["new_year"] = "2100",但我假设应该是“2010”?您应该尝试使用 CrmSvcUtil 工具生成强类
  • 您问题中的代码是 Department.EdRecord.RecordCreate 插件的一部分吗?

标签: c# dynamics-crm crm dynamics-crm-2015


【解决方案1】:

将 CRM 查找字段命名为实体名称并附加 id 是一种常见约定。

Record["new_school"] 是否应该是Record["new_schoolid"]

或者:

100000018 的值可能在 Record["new_gradelevel"] 选项集中不存在。也许注释掉那行,看看会发生什么。

【讨论】:

  • 是的,我试过了,但是它抛出了一些错误,比如没有找到 new_schoolid
  • 好的,我在答案中添加了另一种可能性。
【解决方案2】:

如果 new_gradelevelOptionset 类型的字段,则代码如下:

Record["new_gradelevel"] = new OptionSetValue(100000018);

另外,能否确认new_year的数据类型是String

希望对你有帮助。

【讨论】:

    【解决方案3】:

    与建议的其他答案一样,验证所有字段名称/模式名​​称的正确性。

    您可以通过逐个注释字段来进行反复试验并执行此代码以找出错误行。

    最后,(这将是我的第一个故障排除步骤)交叉检查您在创建 new_edrecord 实体或 new_school 实体的关联后是否有任何其他插件。那个同步插件可能会抛出这个KeyNotFoundExceptionerror,但会在此处冒泡。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-09
      • 2016-01-17
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 2016-11-05
      • 2021-11-18
      • 1970-01-01
      相关资源
      最近更新 更多