Веб-ресурс в Dynamics 365 - пользовательский интерфейс Kendo уничтожен jQuery, загруженным ClientGlobalContext.js.aspx - PullRequest
0 голосов
/ 03 мая 2018

Я использую Kendo UI в веб-ресурсах для Dynamics CRM в течение нескольких лет. Мои компоненты требуют использования ClientGlobalContext.js.aspx. В версии 9.0.2.54 онлайн-версии Dynamics 365 я обнаружил, что более новая версия ClientGlobalContext.js.aspx загружает собственную версию jQuery, не проверяя, присутствует ли она уже. Это делается с помощью оператора document.write, поэтому эта версия jQuery всегда загружается после моего кода. Я могу временно обойти это, используя JavaScript, созданный этим вызовом, с закомментированной строкой загрузки jQuery, поскольку большая часть информации, специфичной для экземпляра / контекста, поступает из запроса xhr, являющегося частью этой страницы, но я ищу поддерживаемый решение, которое будет обновляться без проблем и работать на всех экземплярах. Вот варианты, о которых я подумал, я ищу предложения о том, какой из них является наилучшим, и любые дополнительные рекомендации по этому варианту. Я рассмотрел следующее:

  • Подождите, пока ClientGlobalContext будет доступен, затем протестируйте для jQuery, используйте document.write, чтобы включить его, если его там нет (не будет с некоторыми версиями, и они могут прекратить включать его в любое время), как только jQuery станет доступен, загрузите Kendo и перейдите на мою страницу. Опять же, у меня нет способа изменить страницу Microsoft, и поскольку там есть асинхронные вызовы, это может оставить меня с циклом таймера - я не вижу, как это не страшно, но я могу что-то упустить, и некрасиво или нет, это может быть лучшим вариантом.

  • Убедите Microsoft проверить наличие jQuery перед его перезагрузкой или предоставить альтернативный поддерживаемый файл без jQuery. Так как я не видел, чтобы кто-то еще выражал это разочарование, я не думая, что это вероятно. В настоящее время нет идеи о динамике 365 Форум, это было предложение Telerik, но это разумное ожидание?

  • Отойдите от библиотек пользовательского интерфейса на основе jQuery, так как я никогда не буду контролировать всю страницу в динамике 365. Очень больно, так как я знаю и, как текущая библиотека и версия JQuery имеет функции, которые я использовать, которые еще не в угловой версии (кендо Угловая версия была бы самой легкой миграцией, даже учитывая, что мне пришлось бы изучать угловую версию). Я знаю это субъективный, а не технический, поэтому я могу удалить эту опцию, если она делает вопрос лучше, но это вариант и будет сложнее дальше в проект.
  • Еще одно решение, о котором я не задумывался, учитывая, что динамика веб-ресурсы функционируют полностью на стороне клиента. Я пишу в TypeScript и использование модулей npm и Webpack, если это полезно

1 Ответ

0 голосов
/ 06 мая 2018

Использование jQuery поддерживается и рекомендуется (в некоторых случаях).

Мы рекомендуем использовать jQuery вместе с веб-ресурсами HTML

Я не думаю, что было бы неразумно обсуждать это с Microsoft, чтобы получить некоторую помощь. Тем не менее, это может быть не так полезно;

  • Кажется (насколько я могу судить) вы в основном просите их изменить какой-то код - когда вы (или, возможно, Telerik) могли изменить код для достижения того же самого.
  • Даже если вам удалось убедить их внести изменения, они могут долго не появляться в продукте (например, за месяц).

Вероятно, будет быстрее и сэкономит ваше время, просто внедрив исправление в свой собственный код.

Решение, которое вы можете рассмотреть (упомянутое в статье выше) - с использованием jQuery.noConflict. Скотт Дароу представил решение аналогичной проблемы здесь .

  1. Выберите собственное «пространство имен» для вашей библиотеки jQuery. Я использую ‘xrmjQuery’

  2. В конце вашего скрипта jquery.js добавьте следующую строку:

    /* jQuery script goes here */
    window.xrmjQuery = jQuery.noConflict(true);
    
  3. Внутри вашего скрипта jquery_ui.js (обратите внимание, что ‘-‘ был изменен на подчеркивание, так как CRM не допускает их в именах веб-ресурсов), оберните весь файл в следующие строки:

    (function ($,jQuery) {
      /*! jQuery UI Goes here */
    })(window.xrmjQuery,window.xrmjQuery);
    
  4. Внутри вашего веб-ресурса JavaScript, использующего jQuery и jQuery-UI, оберните ваш код следующим образом:

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

Этот метод называется инкапсуляцией и пространством имен в jQuery.

В отношении поддержки и будущих обновлений. Стоит помнить, что сохранение поддержки означает .

... вы можете предположить (с достаточной уверенностью), что ваш реализации будут;

  • Работает правильно.
  • Служба поддержки Microsoft поможет, если этого не происходит.
  • Продолжит работать, когда произойдет обновление (если функции не устарели - это происходит, но вы обычно получаете уведомление за несколько лет).

Первая статья, которую я связал выше и this , описывает контекст, в котором поддерживается jQuery, но не раскрывает специфику этой ситуации. Я бы предположил, что любое внедренное вами кодовое решение без проблем обновит . При этом тестирование и проверка рекомендуется Microsoft перед обновлением производства.

Как только ваш экземпляр Sandbox был обновлен ... протестируйте обновление на Ваши решения и настройки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...