动态365-Kendo界面中的Web资源被ClientGlobalContext.js.aspx

时间:2018-05-03 15:26:21

标签: javascript jquery kendo-ui dynamics-crm

我已经在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请求,该请求属于此页面的一部分,但我正在寻找支持将毫无问题地升级并跨实例工作的解决方案。 这些是我想到的选项,我正在寻找关于哪个是最佳的建议以及关于该选项的任何其他指导。我考虑过以下几点:

  • 等待ClientGlobalContext可用然后测试jQuery,如果不存在则使用document.write包含它(不会包含某些版本,并且可以随时停止包含它),一旦jQuery可用,加载Kendo并继续我的页面。再说一遍,我没有办法改变微软页面,因为那里有异步调用,这可能会给我带来一个定时器循环 - 我看不出这是不是很难看,但我可能会遗漏一些东西,而且丑陋与否可能是最好的选择。

  • 说服微软在重新加载之前检查jQuery 提供没有jQuery的备用支持文件。自从我 没有看到其他人表达这种挫折感,我不是 认为这很可能。目前还不是Dynamics 365的想法 论坛,这是Telerik的建议,但这是一个合理的期望吗?

  • 离开基于jQuery的UI库,因为我永远不会 在Dynamics 365中控制整个页面。非常痛苦,因为我知道 和当前的库一样,jQuery版本具有我的功能 使用尚未在Angular版本中使用(剑道 角度版本将是最容易的迁移,即使我必须学习角度)。我知道这是 主观而不是技术,所以我可以删除这个选项 使问题更好,但这是一个选择,并将更难 进一步深入项目。
  • 我没有想到的另一个解决方案,请记住Dynamics 网络资源功能完全是客户端。我正在写作 如果有帮助,请使用TypeScript并使用npm模块和Webpack

1 个答案:

答案 0 :(得分:0)

jQuery的使用是supported and recommended(在某些情况下)。

  

我们建议您将jQuery与HTML Web资源一起使用

我不认为向微软提出帮助是不合理的。那说它可能没那么有用;

  • 看来(据我所知)你基本上是要求他们改变一些代码 - 当你(或者Telerik)可以改变代码来实现同样的目的时。
  • 即使您确实设法说服他们进行更改,也可能不会在产品中显示很长时间(例如月份)。

它可能会更快,并节省您的时间,只需在您自己的代码中实现修复。

您可能需要考虑的解决方案(在上文中提到)是using jQuery.noConflict。 Scott Durow提出了类似问题的解决方案here

  
      
  1. 确定jQuery库的自定义“命名空间”。我正在使用'xrmjQuery'

  2.   
  3. 在jquery.js脚本的末尾添加以下行:

    /* jQuery script goes here */
    window.xrmjQuery = jQuery.noConflict(true);
    
  4.   
  5. 在jquery_ui.js脚本中(注意' - '已更改为下划线,因为CRM不允许它们出现在Web资源名称中),   将整个文件包装在以下行中:

    (function ($,jQuery) {
      /*! jQuery UI Goes here */
    })(window.xrmjQuery,window.xrmjQuery);
    
  6.   
  7. 在使用jQuery和jQuery-UI的JavaScript Web资源中,将代码包装在以下内容中:

    (function($){
    // Your Javascript goes here and can reference $ as usual
    // e.g. var someField = $('#fieldName');
    })(window.xrmjQuery);
    
  8.         

    这种技术称为jQuery的封装和命名空间。

关于可支持性和未来升级。值得记住的是staying supported means

  

...你可以(有合理的信心)假设你的   实现将;

     
      
  • 功能正常。
  •   
  • 如果不支持,Microsoft支持将提供帮助。
  •   
  • 升级时会继续工作(除非功能被弃用 - 这种情况会发生,但通常会提前几年通知)。
  •   

我在上面链接的第一篇文章和this构成了支持jQuery的上下文,但没有涵盖这种情况的具体细节。我建议您实施的任何编码解决方案可能升级而不会出现问题。这表示在升级生产之前Microsoft建议进行测试和验证。

  

更新Sandbox实例后...测试更新   您的解决方案和自定义。