在Application Insights上记录D365脚本错误

时间:2017-07-13 12:44:16

标签: azure dynamics-crm azure-application-insights telemetry dynamics-365

我正在尝试使用Application Insights自动记录我的Dynamics 365实例中的表单/脚本错误,但它们没有被跟踪。

我首先在Azure中创建Application Insights资源,然后将以下JavaScript(从App Insights资源的“入门”部分中提取)添加到我的CRM表单(就像这个walkthrough):

var appInsights=window.appInsights||function(config){
function i(config) { t[config] = function () { var i = arguments; t.queue.push(function () { t[config].apply(t, i) }) } }var t={config:config},u=document,e=window,o="script",s="AuthenticatedUserContext",h="start",c="stop",l="Track",a=l+"Event",v=l+"Page",y=u.createElement(o),r,f;y.src=config.url||"https://az416426.vo.msecnd.net/scripts/a/ai.0.js";u.getElementsByTagName(o)[0].parentNode.appendChild(y);try{t.cookie = u.cookie}catch(p){}for(t.queue=[],t.version="1.0",r=["Event","Exception","Metric","PageView","Trace","Dependency"];r.length;)i("track"+r.pop());return i("set"+s),i("clear"+s),i(h+a),i(c+a),i(h+v),i(c+v),i("flush"),config.disableExceptionTracking||(r="onerror",i("_"+r),f=e[r],e[r]=function(config,i,u,e,o){var s=f&&f(config,i,u,e,o);return s!==!0&&t["_"+r](config,i,u,e,o),s}),t
    }({
            instrumentationKey:"XXXXX"
    });

    window.appInsights=appInsights;
    appInsights.trackPageView();

在此之后,我开始看到与页面浏览量和页面加载时间相关的数据,因此启用了跟踪:

enter image description here

然后我的下一步操作就是强制表单中的一些脚本错误在Azure中可视化。为此,我在字段的OnChange事件中添加了一个JavaScript函数,以获得“未定义”错误:

enter image description here

正如您在上一张图片中看到的那样,错误在D365中按预期抛出,但在Application Insights中没有记录。经过一些测试后,我开始怀疑CRM正在捕获该错误并且不让它到达浏览器(错误没有出现在控制台中)。为了证实我的怀疑,我创建了一个HTML网页,其中包含相同的App Insights配置,我模拟了错误,以查看在该方案中是否正在跟踪错误并且答案是肯定的:

enter image description here

因此,似乎Dynamics正在“吞下”错误并阻止其被记录。以前有人遇到过这个问题吗?我是否可以使用解决方法成功跟踪App Insights中的错误?

谢谢!

1 个答案:

答案 0 :(得分:0)

Dynamics CRM将以特殊方式处理自定义脚本块。

我们必须在js&表格中优雅地捕捉异常。将其记录在AI中,如下所示。

try { ... } catch (ex) { appInsights.trackException(ex); }

参考:https://docs.microsoft.com/en-us/azure/application-insights/app-insights-api-custom-events-metrics#trackexception