CRM D365:插件更新多态查找字段未生效,求排查方法
多态查找字段更新失效的排查步骤
先梳理你代码里的潜在问题,按优先级逐一排查:
字段名拼写错误:你代码里的
my_ploymorphiclookupid存在拼写错误(正确应为polymorphic),如果字段实际逻辑名称是my_polymorphiclookupid,这个错误会直接导致更新不生效。先去解决方案里确认字段的逻辑名称,必须完全匹配。缺少多态类型字段赋值:Dynamics 365的多态查找字段由两个属性组成:
- 存储ID的字段:比如
my_polymorphiclookupid - 存储实体类型的字段:通常为
my_polymorphiclookupidtype(后缀加type)
仅赋值ID字段的话,系统无法识别引用指向的实体类型,更新自然无效。补充代码:
destinationEntity["my_polymorphiclookupidtype"] = "my_entity1";- 存储ID的字段:比如
验证目标记录ID有效性:确认
myBookingGuid对应的bookableresourcebooking记录确实存在,且当前插件执行用户拥有该记录的写入权限。检查服务实例与上下文:确保
organizationService是插件上下文提供的有效实例(比如context.OrganizationService),而非权限不足的自定义实例。排查异常吞吃问题:给代码添加try-catch块,捕获并输出异常信息——很多更新失败是因为未被捕获的错误(如字段权限不足、记录不存在、实体引用无效等):
try { var entity1Id = "af435c64-a264-4f2a-9cee-22069ce36b3c"; var destinationEntity = new Entity("bookableresourcebooking", new Guid(myBookingGuid)); destinationEntity["my_polymorphiclookupid"] = new EntityReference("my_entity1", new Guid(entity1Id)); destinationEntity["my_polymorphiclookupidtype"] = "my_entity1"; // 补充类型字段 organizationService.Update(destinationEntity); } catch (Exception ex) { tracingService.Trace("Update failed: {0}", ex.ToString()); throw; // 重新抛出异常,让系统记录错误详情 }确认多态字段支持目标实体:检查
my_polymorphiclookupid字段的配置,确认my_entity1已被添加为该多态字段允许引用的实体类型,否则系统会拒绝更新。
内容的提问来源于stack exchange,提问作者Ramu
相关产品推荐
相关产品推荐

