dynamics-crm - 从 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 错误。等一下,我可以毫无问题地创建新字段。
解决方案
我认为根据您收到的错误以及它有条件地发生的事实,这个插件可能实际上并没有失败。更有可能的是,您的 server.Update(a); 调用导致辅助插件或由更新重新认证记录触发的工作流操作失败。
- 注释掉该行并验证插件是否有效
- 查看是否可以通过直接更新重新认证记录上的该字段来重现故障
- 查看针对重新认证实体运行的插件/工作流
这很可能有以下根本原因之一:
- 基于表单更新或工作流更新之间的不同执行用户的安全问题
- 其他切线字段正在通过这两种方法中的一种或另一种进行更新,这随后会导致不同的行为辅助插件/工作流程
推荐阅读
- python - Dataflow/apache Beam - 传入模式时如何访问当前文件名?
- unit-testing - SpringBootTest - 请求无效时测试异常
- purescript - PureScript 中的全局资源(适用于 AWS Lambda)
- sql-server - SSRS 2017 带有日期的级联参数
- swift - 从匹配的关联值中获取枚举
- php - 使用 ajax (Codeigniter) 将数组从视图提交到控制器
- visual-studio-code - 用于访问当前活动调试会话的调试上下文、变量、异常的 VS Code 扩展
- c - 如何使用 LLVMBuildStore API
- html - 如何动态使所选颜色变暗
- wordpress - 检查数据库中是否已存在 post_content