[gelöst] Javascript FetchXML

Bild Microsoft Dynamics CRM 2011

[gelöst] Javascript FetchXML

Beitragvon Nicole Schmitz » 4. Dezember 2012 12:03

Hallo zusammen,

ich habe in CRM 4.0 im Javascript eine FetchXML Funktion sehr häufig verwendet, die nun leider im neun CRM nicht mehr funktioniert. Kann mir da jemand helfen, was da im neuen CRM geändert werden muss? Hab schon gegoogelt aber irgendwie nicht wirklich was gefunden. Die Funktion ist damals auch nicht von mir geschrieben gewesen. Habe die meine ich in irgendeinem Blog gefunden weiß aber leider nicht mehr wo. Prinzipiell funktioniert FetchXML aber doch auch noch im neuen CRM was ist an dieser Funktion falsch?

Code: Alles auswählen
function GetAttributeValueFromID(sEntityName, sGUID, sAttributeName)
{
    var sXml = "";
    var oXmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

    // set up the SOAP message
    sXml += "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
    sXml += "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"";
    sXml += " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
    sXml += " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">";
    sXml += GenerateAuthenticationHeader()
    sXml += " <soap:Body>";
    sXml += " <entityName xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\">" + sEntityName + "</entityName>";
    sXml += " <id xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\">" + sGUID + "</id>";
    sXml += " <columnSet xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\"";
    sXml += " xmlns:q=\"http://schemas.microsoft.com/crm/2006/Query\"";
    sXml += " xsi:type=\"q:ColumnSet\"><q:Attributes><q:Attribute>" + sAttributeName + "</q:Attribute></q:Attributes></columnSet>";
    sXml += " </soap:Body>";
    sXml += " </soap:Envelope>";

    // send the message to the CRM Web service
    oXmlHttp.Open("POST", "/MsCrmServices/2006/CrmService.asmx", false);
    oXmlHttp.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2006/WebServices/Retrieve");
    oXmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    oXmlHttp.setRequestHeader("Content-Length", sXml.length);
    oXmlHttp.send(sXml);

    // retrieve response and find attribute value
    var result = oXmlHttp.responseXML.selectSingleNode("//q1:" + sAttributeName);
    if (result == null)
        return "";
    else
        return result.text;
}


Oder gibt es im CRM 2011 einen einfacheren Weg über Javascript an die Felder einer im Lookup verknüpften Entität zu kommen? Würde mir auch schon reichen.

Danke und viele Grüße
Nicole
Zuletzt geändert von Nicole Schmitz am 13. Dezember 2012 09:39, insgesamt 1-mal geändert.
Viele Grüße
Nicole
Nicole Schmitz
 
Beiträge: 427
Registriert: 4. Oktober 2010 16:17
Realer Name: Nicole Schmitz
Arbeitsort: Hennef
Microsoft Dynamics Produkt: Microsoft Dynamics CRM
Microsoft Dynamics Version: 2015

Re: Javascript FetchXML

Beitragvon Michael Sulz » 4. Dezember 2012 17:05

Hallo Nicole,

in CRM 2011 würde ich das immer mit oData lösen. Google einfach mal nach CRM2011 und oData, dann bekommst du hunderte von Beispielen.
Gruß, Michael Sulz
Mein Blog
Xing LinkedIn Facebook Twitter

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! Dafür ist dieses Forum da.

Wie man Fragen richtig stellt
Benutzeravatar
Michael Sulz
Microsoft Partner
Microsoft Partner
 
Beiträge: 4939
Registriert: 9. September 2009 17:41
Wohnort: Münster
Realer Name: Michael Sulz
Arbeitsort: Münster
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics CRM

Re: Javascript FetchXML

Beitragvon gE3z » 5. Dezember 2012 09:28

Hallo Nicole:

function Save(sEntity, sGuid, sColumn)
{
var entity = entity;
var select = "select="+sColumn;
var filter = "filter=entityid/value eq " + sGuid:
var retrieveRequest = new XmlHttpRequest();
retrieveRequest.open("GET", CRMSERVERURL + "/" + entity + "?$" + filter + "&$" + select , false);
retrieveRequest.setRequestHeader("Accept", "application/json");
retrieveRequest.setRequestHeader("Content-Type", "application/json; charset=utf-8");
retrieveRequest.onreadystatechange = function ()
{
if(retrieveRequest.readyState == 4)
{
if(retrieveRequest.status == 200)
{
ToDo Code.
}
}
}
}
retrieveRequest.onreadystatechange << Den Code den du hier aufrufst würde ich in eine eigene Funtion dann einbetten. Ich würde auch die Überprüfung auf readyState und status einbauen, da dieses onreadystatechange Asynch abläuft wird diese Mehtode mehrmals aufgerufen. Du willst schließlich erst wenn die Ganzen Daten ermittelt sind dass dein Code ausgeführt wird.

Grüße
gE3z
gE3z
 
Beiträge: 196
Registriert: 14. Mai 2012 08:38
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics CRM
Microsoft Dynamics Version: 4.0 / 2011 / 2013

Re: Javascript FetchXML

Beitragvon Nicole Schmitz » 13. Dezember 2012 09:38

Hallo zusammem,

erstmal danke für die Hilfe.

Für die die nach ähnlichem auf der Suche sind, ich habe das jetzt folgendermaßen gelöst:

Ich habe eine globale Funktion geschrieben in Global_Functions.js (Dieses Script lade ich jetzt in jedem Formular in dem ich es brauche vor dem eigentlichen Formularscript):
Code: Alles auswählen
function GetAttributeValueWithOData(sSelectstatement){
    var serverUrl = "http://" + window.location.host + "/" + Xrm.Page.context.getOrgUniqueName();

 // Creating the Odata Endpoint
    var oDataPath = serverUrl + "/XRMServices/2011/OrganizationData.svc";
    var retrieveReq = new XMLHttpRequest();
    var Odata = oDataPath + sSelectstatement;
    retrieveReq.open("GET", Odata, false);
    retrieveReq.setRequestHeader("Accept", "application/json");
    retrieveReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
       retrieveReq.send();

    if (retrieveReq.readyState == 4 /* complete */) {
        var retrieved = this.parent.JSON.parse(retrieveReq.responseText).d;
        return retrieved.results[0];
    }
}

Und in jedem Formular in dem ich dieses globale Script vorher geladen habe kann ich nun im Hauptscript durch einen der folgenden Aufrufe Daten aus einer verknüpften Entität auslesen:
Code: Alles auswählen
/*Möglicher Beispielaufruf, bei dem man danach auf ein bestimmtes Feld hier EMailAdress1 zugreifen kann*/
var Kunde  = new Array();
Kunde = Xrm.Page.getAttribute("customerid").getValue();
var kundeid = Kunde[0].id;
alert(GetAttributeValueWithOData("/ContactSet?$select=EMailAddress1&$filter=ContactId eq guid'" + kundeid + "'").EMailAddress1);

/*Möglicher Beispielaufruf, bei dem man danach auf alle Felder des Kontakts zugreifen kann*/
var Kunde  = new Array();
Kunde = Xrm.Page.getAttribute("customerid").getValue();
var kundeid = Kunde[0].id;
var resultKunden = GetAttributeValueWithOData("/ContactSet?$select=*&$filter=ContactId eq guid'" + kundeid + "'");
alert(resultKunden.EMailAddress1);
alert(resultKunden.FirstName);

/*Möglicher Beispielaufruf, bei dem man danach auf die Felder zugreien kann, die im Select angegeben sind.
Funktioniert aber bei uns im Moment nicht, obwohl das im SDK so als Aufruf angegeben*/
var Kunde  = new Array();
Kunde = Xrm.Page.getAttribute("customerid").getValue();
var kundeid = Kunde[0].id;
var resultKunden = GetAttributeValueWithOData("/ContactSet?$select=EMailAdress1,FirstName&$filter=ContactId eq guid'" + kundeid + "'");
alert(resultKunden.EMailAddress1);
alert(resultKunden.FirstName);


Viele Grüße
Nicole
Viele Grüße
Nicole
Nicole Schmitz
 
Beiträge: 427
Registriert: 4. Oktober 2010 16:17
Realer Name: Nicole Schmitz
Arbeitsort: Hennef
Microsoft Dynamics Produkt: Microsoft Dynamics CRM
Microsoft Dynamics Version: 2015


Zurück zu CRM 2011

Wer ist online?

Mitglieder in diesem Forum: DotBot [Bot] und 1 Gast

cron