Microsoft Dynamics CRM Online 2015 Update 1 (Spring 2015) - ReferenceError: $ is not defined error
La semana pasada hemos actualizado a Dynamics 2015 Update 1. Al llegar la mañana del lunes y tratando de trabajar en Dynamics la primera cosa que noté fue la velocidad de la forma de carga - ¡ha mejorado mucho! Gracias Microsoft (¡por fin!) por prestar atención a esto - Trabajar con Dynamics era un sufrimiento antes de este aumento de velocidad.
Sin embargo, la segunda cosa que noté fue que nos iban a dar errores de nuestros scripts personalizados que utilizan jQuery - siendo el error "ReferenceError: $ is not defined error" - $ se cambió con "jQuery" cuando se estaba utilizando esa referencia.
Pude ver (a través del inspector de la red FireFox) que jQuery estaba siendo cargado en la página, y estaba disponible en la consola, por lo que el hecho de que nuestros scripts no podían acceder a ella estaba un poco confuso.
Abrí un caso de soporte rápido con Microsoft, que más tarde me llamó para la sesión habitual de apoyo screen sharing. La operadora (Gitanjali) intentó algunas cosas conmigo, sin ningún resultado. Eventualmente, ella cambió el sistema de nuevo a la "Legacy form rendering" (Settings > Administration > System Settings > "Use legacy form rendering" = Yes) , que resolvió el problema - sorpresa, sorpresa, ¡ya que no habíamos tenido problemas antes de la actualización!
Gitanjali sugirió que esta era la solución temporal necesaria, y que Microsoft era consciente de los diversos problemas con la nueva prestación del formulario, incluido éste, y que lo arreglarían en un parche futuro.
Mientras acepto esta línea de Gitanjali en cuanto a la posición oficial de Microsoft, ¡no estaba todavía listo para renunciar a las nuevas formas rápidas! Así que me zambullí en el código para investigar un poco más - y luego me dí cuenta de que los archivos javascript definidos por el usuario están siendo cargados en la página mediante un iframe - lo que significa que no tienen acceso a las variables definidas en javascript en marcos más arriba la pila de marco.
Felizmente, esto significaba que yo podría simplemente probar la existencia de "$" como un objeto, y si no definido, el punto a la variable ya definida más arriba en la pila del marco, de la siguiente manera:
if (typeof($) === 'undefined') { $ = parent.$; jQuery = parent.jQuery; }
Hey-ho, problema resuelto, ¡y podemos seguir utilizando las nuevas formas rápidas! Felizmente, todo nuestro código relacionado con jQuery esta en un solo archivo de funciones comunes que se utiliza para apoyar diversos código específicos para la entidad, por lo que sólo una única actualización de nuestra base de código era necesaria :)
¡Espero que esto ayude a alguien más allí fuera que este teniendo el mismo problema! O, alternativamente, no dude en ponerse en contacto con nosotros si necesita ayuda con la instalación de la dinámica ...
Contactános o llámanos al +34 938 021 278 o al +44 (0)118 907 6212