viernes, 25 de septiembre de 2009

Como incluir ficheros javascript externos (.JS) en formularios

Una crítica que solemos hacer los que trabajamos mucho con el CRM de Microsoft, es relacionado con el editor de Javascript que tiene el CRM.
Es pequeño, sin tabulaciones, y para probar nuestros cambios, necesitamos entrar en la entidad, y probar todo allí, o si queremos verlo con datos reales, publicarlo y luego verlo en real.
Una pequeña ayuda, aunque no soportada, es la de incluir un fichero externo con todo nuestro Javascript en el "Onload" del formulario, y luego trabajar simplemente con dicho Javascript mediante Visual Studio (un editor de verdad).
Así no tendremos más incluir el siguiente código en el Onload de la entidad que deseamos:

var script = document.createElement('script');
script.language = 'javascript';
script.src = 'http://localhost/EntidadLoad.js';
script.onreadystatechange = OnScriptReadyState;
document.getElementsByTagName('head')[0].appendChild(script);

function OnScriptReadyState()
{
if (event.srcElement.readyState == "loaded" || event.srcElement.readyState == "complete")
{
EjecutoLoad(); // una funcion del fichero "EntidadLoad.js"
}
}

Al cargar un Javascript "en caliente" debemos controlar que antes de llamar a cualquier función dentro de dicho Javascript, el mismo se haya terminado de descargar, ya que sino podemos provocar un error de Javascript. Por eso debemos controlar el evento OnScriptReadyState.
De esta forma podriamos crearnos un javascript (en este caso "EntidadLoad.js") por cada "Load()" y utilizarlo en cada entidad.

Si intentamos hacer algo más genérico, podríamos también crear un solo javascript genérico para todas las entidades, al cual siempre le pasaremos el nombre de la entidad de que se trate, para que así no tengamos muchos ficheros "Js", uno por cada entidad. Simplemente añadiríamos a la llamada a la funcion "EjecutoLoad();" el parámetro del nombre de la entidad y luego controlar dicho parámetro en nuestro fichero js:

EjecutoLoad(crmForm.ObjectTypeName);

Con la inclusión de javascript debemos tener en cuenta, que los mismos no se incluirán en una posible "exportación/importación" de personalizaciones, por eso, recomiendo utilizar esto solo en un servidor de desarrollo, para luego subirlo correctamente en producción.

Espero les pueda ser de utilidad,
Un abrazo

No hay comentarios:

Publicar un comentario