[Gelöst] JavaScript Funktion zentral ablegen

26. März 2010 15:02

Hallo zusammen!

Ich benötige häufiger mal in OnLoad-Funktionen Daten aus verknüpften Entitäten. Da der ganze XML-Code sehr viel Platz einnimmt und es somit schnell unübersichtlich wird, würde ich gerne an zentraler Stelle eine Funktion ablegen, in die ich diesen Code auslagere. Das könnte dann ungefähr so aussehen:

Code:
function getSingleAttributeValue(entityName, entityId, AttributeName) {
   
    var returnValue;
    var authenticationHeader = GenerateAuthenticationHeader();

    // Prepare the SOAP message.
    var xml = "<?xml version='1.0' encoding='utf-8'?>" +
         "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'" +
            " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" +
            " xmlns:xsd='http://www.w3.org/2001/XMLSchema'>" +
            authenticationHeader +
            "<soap:Body>" +
               "<Retrieve xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>" +
                  "<entityName>" + entityName + "</entityName>" +
                  "<id>" + entityId + "</id>" +
                  "<columnSet xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:ColumnSet'>" +
                     "<q1:Attributes>" +
                        "<q1:Attribute>" + AttributeName + "</q1:Attribute>" +
                     "</q1:Attributes>" +
                  "</columnSet>" +
               "</Retrieve>" +
            "</soap:Body>" +
         "</soap:Envelope>";
    // Prepare the xmlHttpObject and send the request.
    var xHReq = new ActiveXObject("Msxml2.XMLHTTP");
    xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
    xHReq.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Retrieve");
    xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    xHReq.setRequestHeader("Content-Length", xml.length);
    xHReq.send(xml);
    // Capture the result.
    var resultXml = xHReq.responseXML;

    // Check for errors.
    var errorCount = resultXml.selectNodes('//error').length;
    if (errorCount != 0) {
        var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
        returnValue = "Fehler: " + msg;
    }
    // Display the retrieved value.
    else {
        returnValue = resultXml.selectSingleNode("//q1:" + AttributeName).nodeTypedValue;
    }

    return returnValue;
}


Die Frage ist, wo kann ich so eine Funktion ablegen, sodass ich sie dann auch aus der OnLoad-Funktion heraus aufrufen kann?
Vielen Dank schonmal!

Viele Grüße,
Daniel
Zuletzt geändert von DanP am 29. März 2010 13:41, insgesamt 1-mal geändert.

Re: JavaScript Funktion zentral ablegen

26. März 2010 15:09

Hallo Daniel,

supportet gibt es da keine Möglichkeit in CRM 4.

Ich speichere Funktionen, die ich sehr oft benötige, in der global.js aus dem Verzeichnis ..\_static\_common\scripts, ab. Das ist allerdings völlig unsupportet und bedeutet auch, das diese Funktion beim öffnen jeder Entitä#t automatisch geladen wird. Wenn du also sehr große Funktionen einbaust, wird sich die Ladezeit des gesammten Systems verlängern.

Re: JavaScript Funktion zentral ablegen

26. März 2010 15:17

Hi Michael!

Danke für den Tipp! Werden die .js-Dateien unter ..\_static\.. alle automatisch geladen? Ich hatte gerade schon mal versucht, meine Funktion in ..\_static\_controls\util.js rein zu hängen, beim Aufruf kam dann aber eine Fehlermeldung. Muss ich nach dem Speichern der Datei noch irgendwas machen? Irgendein "Refresh" oder so?

Gruß,
Daniel

Re: JavaScript Funktion zentral ablegen

26. März 2010 22:53

Hallo Daniel,

du musst auf jedem Fall den Cache des IE leeren und den IIS neu starten, damit die neue Global.js geladen wird.

Re: JavaScript Funktion zentral ablegen

29. März 2010 13:41

Hallo Michael!

Läuft. Danke!

Viele Grüße,
Daniel