多年来,我一直在Dynamics CRM的Web资源中使用Kendo UI。我的组件需要使用ClientGlobalContext.js.aspx。在Dynamics 365 Online版本9.0.2.54中,我发现较新版本的ClientGlobalContext.js.aspx加载了自己的jQuery版本,而没有检查是否已经存在。它使用document.write语句执行此操作,因此始终在我的代码之后加载此版本的jQuery。我可以通过使用jQuery加载行注释掉的此调用生成的JavaScript暂时解决此问题,因为大多数实例/上下文特定信息来自xhr请求,该请求属于此页面的一部分,但我正在寻找支持将毫无问题地升级并跨实例工作的解决方案。这些是我想到的选项,我正在寻找关于哪个是最佳的建议以及关于该选项的任何其他指导。我考虑过以下几点:
jQuery的使用是supported and recommended(在某些情况下)。
我们建议您将jQuery与HTML Web资源一起使用
我不认为与微软提出帮助是不合理的。那说它可能没那么有用;
它可能会更快,并节省您的时间,只需在您自己的代码中实现修复。
你可能想要考虑的解决方案(在上面的文章中提到)是using jQuery.noConflict
。 Scott Durow提出了类似问题here的解决方案。
- 确定jQuery库的自定义“命名空间”。我正在使用'xrmjQuery'
- 在jquery.js脚本的末尾添加以下行:
/* jQuery script goes here */ window.xrmjQuery = jQuery.noConflict(true);
- 在jquery_ui.js脚本中(注意' - '已更改为下划线,因为CRM不允许它们在Web资源名称中),请将整个文件包装在以下行中:
(function ($,jQuery) { /*! jQuery UI Goes here */ })(window.xrmjQuery,window.xrmjQuery);
- 在使用jQuery和jQuery-UI的JavaScript Web资源中,将代码包装在以下内容中:
(function($){ // Your Javascript goes here and can reference $ as usual // e.g. var someField = $('#fieldName'); })(window.xrmjQuery);
这种技术称为jQuery的封装和命名空间。
关于可支持性和未来升级。值得记住staying supported means。
......你可以(有合理的信心)假设你的实现会;
- 功能正常。
- 如果不支持,Microsoft支持将提供帮助。
- 升级发生时将继续工作(除非功能被弃用 - 这种情况会发生,但通常会提前几年通知)。
我上面链接的第一篇文章和this构成了支持jQuery的上下文,但没有涵盖这种情况的细节。我建议您实施的任何编码解决方案可能会毫无问题地升级。这表示在升级生产之前,Microsoft建议进行测试和验证。
更新Sandbox实例后...测试解决方案和自定义项的更新。