首页 > 解决方案 > 从 Dynamics CRM 2011 升级到 CRM 2016 后,表单和插件出现奇怪问题

问题描述

客户公司刚刚从 2011 年升级到 2016 年。我一直在测试插件以确保它们仍然可以正常工作,我终于(经过很多挫折之后)弄清楚发生了什么,但不知道为什么或如何解决这个问题。

我有几个插件,它们的功能都完全符合预期——只要数据的更新不通过表单运行。

让我解释:

我有在更改字段时触发的插件(同步)。如果通过工作流或其他编码过程更改字段,则一切运行正常。

但是当我更新表单上的字段时,它是自我的。它失败并出现一个非常一般的错误(如下)。

我在 2016 年已经支持其他几个客户,但我没有遇到同样的问题。所以我什至不知道从哪里开始。最近几天我一直在这里发疯检查代码。但它只发生在更新表单上的字段时。我测试过的所有其他更新数据的方法都没有错误。

我还有另一个问题。当字段更新(通过测试工作流)时,它会运行并更新子记录。然后,子记录具有运行以停用记录的工作流。工作流说它运行并停用了记录,但它从未停用)。

反正。如果有人对可能导致这种情况的原因有任何想法。我很想听听。我对此束手无策。

先感谢您。

我已经测试了代码并让它成功运行,只要我不通过表单更新字段。为了测试这一点,我创建了一些更新数据的测试工作流,它们成功运行并且插件没有问题地启动。

EntityReference contact =    
(EntityReference)preImageEntity.Attributes["ipmahr_contact"];

QueryExpression cn = new QueryExpression("ipmahr_recertification");
cn.ColumnSet = new ColumnSet("ipmahr_contact", "statecode");
cn.Criteria.AddCondition("ipmahr_contact", ConditionOperator.Equal,  
contact.Id);
cn.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0);

EntityCollection results1 = server.RetrieveMultiple(cn);

if (results1.Entities.Count > 0)
     foreach (Entity a in results1.Entities)
     {
      a.Attributes["ipmahr_deactivaterecertificationrecord"] =   true;
         server.Update(a);
     }    

在大多数情况下,代码非常简单,只要表单上的内容没有更新,就可以正常工作。

这是错误:异常:System.ServiceModel.FaultException`1[Microsoft.Xrm.Sdk.OrganizationServiceFault]:System.ServiceModel.CommunicationObjectFaultedException:#595EB751(故障详细信息等于 Microsoft.Xrm.Sdk.OrganizationServiceFault)。,相关 ID :FD1A79CA-C846-407B-B578-AC9207D6DD0E,启动用户:274D5555555DC-3F4D-E811-B30F-0050569142AF退出recertifications.main.main.deactivateivateivateedrecertication-recertiatiationdreciatiationRecitiationsOnendEndynynendyndatendation-corirdation-coriorecute.ecute.ecute.ecute.ecute.ecute.eecute.eecute.ecute(eceelecute) 274d55dc-3f4d-e811-b30f-0050569142af


新的信息。我发现并非我编写的所有插件在此服务器上都有问题。这很好。但我也发现那些失败的插件有一个共性。

任何使用查询表达式的插件都会失败并出现一般错误。添加强大的错误检查并没有显示任何内容(一旦添加了错误检查,它就没有运行任何东西,也没有在日志中产生任何错误)。跟踪日志也没有显示任何重要信息。

所以现在我想知道查询表达式的格式是否存在问题,或者 SQL 是否存在问题。我之所以提到 SQL,是因为我今天早上发现如果我创建字段的速度太快,我会得到一个通用的 SQL 错误。等一下,我可以毫无问题地创建新字段。

标签: dynamics-crmmicrosoft-dynamicsdynamics-crm-2016

解决方案


我认为根据您收到的错误以及它有条件地发生的事实,这个插件可能实际上并没有失败。更有可能的是,您的 server.Update(a); 调用导致辅助插件或由更新重新认证记录触发的工作流操作失败。
- 注释掉该行并验证插件是否有效
- 查看是否可以通过直接更新重新认证记录上的该字段来重现故障
- 查看针对重新认证实体运行的插件/工作流

这很可能有以下根本原因之一:
- 基于表单更新或工作流更新之间的不同执行用户的安全问题
- 其他切线字段正在通过这两种方法中的一种或另一种进行更新,这随后会导致不同的行为辅助插件/工作流程


推荐阅读