5

正如标题所述,我正在寻找一种方法来区分由我的代码或基本 CRM 功能引起的错误与可能安装在客户端系统上的任何自定义插件引发的错误之间的区别。

我们不断成为受害者的是我们的客户自定义第三方插件,这些插件要么是他们自己创建的,要么是从另一个 ISV 购买的。他们将其注册在我们接触的 CRM 实体上,甚至在最近的案例中也注册在我们自己的实体上。我们尝试做某事,插件尝试做它的事情并失败。在最近的示例中,我们将插件放入 CRM 后,该插件未正确编码 '。该插件抛出一个错误,CRM 将其返回给我们。

如何在不浪费时间进行调查的情况下判断该插件是罪魁祸首?到目前为止,我只看到一家公司通过将插件堆栈跟踪作为错误消息来轻松识别。

为清晰而编辑:

  • 我正在寻找一种程序化解决方案,以减少识别问题所需的时间是自定义插件,而不是我们的代码与 Azure 中的 CRM 交互。
  • 我正在尝试增强我们的错误记录/处理,使其足够聪明以区分差异。
  • 即使我们的代码 100% 工作但触发同步插件触发并且该插件失败,我们也会从 CRM 中获得异常。
  • 我们所做的一切都是通过 SDK 编程的。
4

4 回答 4

2

唯一想到的是启用 CRM 跟踪。下面的链接应说明如何在 Microsoft Dynamics CRM 中执行此操作。

http://support.microsoft.com/kb/907490

于 2013-04-15T14:05:00.790 回答
1

当出现插件异常时如下图: 在此处输入图像描述

您可以下载日志文件,在里面您可以轻松找到导致异常的插件,例如查看此日志:

Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: StupidPluginDetail: 
// ... other details
[StupidPlugin: StupidPlugin.ExamplePlugin]
[bda9ad85-c4a5-e211-bc00-78e7d162ee67: StupidPlugin.ExamplePlugin: Create of orderclose]
</TraceText>
</OrganizationServiceFault>
于 2013-04-15T14:10:26.670 回答
1

查看服务返回的异常的Detail.TraceText属性。我还没有设法获得完整的堆栈跟踪,但它返回了一些信息,表明哪里出了问题:

Mario.CRM.TestOrg.Plugins:Mario.CRM.TestOrg.Plugins.ContactPreUpdate

[5ee31a9e-3558-e211-adeb-00155d014401:Mario.CRM.TestOrg.Plugins.ContactPreUpdate:更新联系人]

示例代码片段

try
{
  //create service proxy and call service
}
catch (Exception ex)
{
  Console.WriteLine(((System.ServiceModel.FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>)(ex)).Detail.TraceText);
}
于 2013-04-16T19:08:01.500 回答
0

不建议在生产环境中使用此方法,但对测试环境非常有益。每当使用 SDK 的 CRUD 操作失败时,您可以以编程方式禁用所有插件,并尝试相同的操作。如果成功,请一次启用一个插件,直到失败。然后您就可以确定是哪个插件导致了问题,或者它是否根本不是插件。

于 2013-04-15T14:33:11.223 回答