正如标题所述,我正在寻找一种方法来区分由我的代码或基本CRM功能引起的错误与可能安装在客户端系统上的任何自定义插件引发的错误。
我们不断成为受害者的是我们的客户定制的第三方插件,无论是他们在内部创建还是从另一个ISV购买。他们在我们接触的CRM实体上注册它,或者甚至在最近的一个案例中注册我们自己的实体。我们尝试做某事,插件尝试做它的事情并失败。在最近的例子中,插件在我们将其放入CRM后没有正确编码。该插件抛出错误,CRM将其抛回给我们。
如何在不浪费时间调查的情况下判断该插件是罪魁祸首?到目前为止,我只看到一家公司通过将插件堆栈跟踪作为错误消息来轻松告诉。
澄清的编辑:
答案 0 :(得分:2)
唯一想到的是启用CRM跟踪。以下链接应说明如何在Microsoft Dynamics CRM中执行此操作。
答案 1 :(得分: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>
答案 2 :(得分: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);
}
答案 3 :(得分:0)
这不建议在生产环境中使用,但对测试环境非常有益。每当使用SDK失败CRUD操作时,您都可以以编程方式禁用所有插件,并尝试相同的操作。如果成功,请一次启用一个插件,直到它失败。然后你就可以确定导致问题的是哪个插件,或者根本不是插件。