从 Dynamics CRM 2011 升级到 CRm 2016 后遇到表单和插件的奇怪问题

After upgrade from Dynamics CRM 2011 to CRm 2016 experiencing weird issue with forms and plugins

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

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

让我解释一下:

我有插件(同步),可以在字段更改时触发。如果通过工作流或其他一些编码过程更改了字段,则一切 运行 都很好。

但是当我更新表单上的字段时,它是自己的。它因一个非常普遍的错误而失败(如下)。

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

我还有一个问题。更新字段时(通过测试工作流),它 运行 会更新子记录。然后子记录有一个 运行s 的工作流来停用记录。工作流说它 运行 并停用了记录,但它永远不会停用)。

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

提前致谢。

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

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);
     }    

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

这里是错误:Exception: System.ServiceModel.FaultException`1[Microsoft.Xrm.Sdk.OrganizationServiceFault]: System.ServiceModel.CommunicationObjectFaultedException: #595EB751 (Fault Detail is equal to Microsoft.Xrm.Sdk.OrganizationServiceFault)., Correlation ID:fd1a79ca-c846-407b-b578-ac9207d6dd0e,发起用户:274d55dc-3f4d-e811-b30f-0050569142af 退出 Recertifications.Main.DeactivateUsedRecertificationsonEndDateChange.Execute(),关联 ID:fd1a79ca-c846-407b-b578-ac9207d6 用户:5207d6 -3f4d-e811-b30f-0050569142af


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

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

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

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

审核plugin/workflows运行

这很可能是以下根本原因之一:
- 基于表单更新或工作流更新之间不同执行用户的安全问题
- 其他切向场正在通过这两种方法中的一种或另一种进行更新,这些方法随后会在次要 plugin/workflow

中导致不同的行为