Como carregar javascripts externos em um formulário do Microsoft Dynamics CRM 4.0

Utilizando a função que publiquei em um post anterior é possivel carregar scripts JavaScript dinamicamente ao abrir o formulario de uma entidade do Microsoft Dynamics CRM.

Adaptaremos apenas o carregamento do script jQuery.
Consideramos neste exemplo que o jQuery esteja na pasta ISV do CRM, mais especificamente na estrutura ISV/Javascript/Util.

Vejam como ficou o evento OnLoad do formulário da minha entidade:

var jsUrl = '/ISV/JavaScript/Util/jquery-1.3.2.min.js';
objScript = document.createElement("<script src='" + jsUrl + "' type='text/javascript'>");
document.getElementsByTagName("head")[0].insertAdjacentElement("beforeEnd", objScript);
 
objScript.attachEvent("onreadystatechange", scriptLoad);
 
function scriptLoad()
{
    var rs = event.srcElement.readyState;
 
    if (rs == "loaded" || rs == "complete")
    {
         carregarScripts(function(){ iniciarProcessamento(); });
    }
}
 
// Colocar as dependencias primeiro e o script a ser executado por esta entidade em ultimo lugar
var scripts = ['/ISV/JavaScript/Util/scriptLib1.js',
               '/ISV/JavaScript/Util/scriptLib2.js',
               '/ISV/JavaScript/Formularios/MinhaEntidade/FormLoad.js'];
 
function carregarScripts(callback) {
    if (scripts == null || scripts.length == 0) {
        callback();
        return;
    }
    var script = scripts[0];
    scripts = scripts.slice(1);
 
    $.getScript(script, function() { carregarScripts(callback); });
}

Explicações…

A primeira parte do createElement + insertAdjacentElement, criamos um node de script com a url do jQuery e o inserimos no cabeçalho () da pagina, em primeira posição.

O attachEvent() é para associarmos uma função ao evento de acompanhamento do carregamento daquele node, no caso, do nosso script.
Na função responsável por acompanhar o andamento do carregamento, verificamos se o status esta como completo e, caso esteja, iniciamos a função de carregamento dos outros scripts, ja que a função $.getScript() está disponível.