JavaScript - Webservice in CRM 4.0 nutzen

12. November 2009 19:52

Es kommt immer wieder vor, das mit JavaScript auf den Webservice des CRM zugegriffen werden muss, um weitere Daten zu ermitteln.
Das folgende Beispiel zeigt einen sehr einfachen Weg, um dies zu erreichen.

Code:
// Prüfen, ob das LookUp Feld überhaupt Daten enthält
if (crmForm.all.new_lookupfield.DataValue != null)
{
   // Die ID des Datensatzes zuweisen
   var myId = crmForm.all.new_lookupfield.DataValue[0].id;
   
   // Definieren der SOAP XML Message für den Zugriff auf den CRM Webservice
   // Hier wird auch die Funktion GenerateAuthenticationHeader verwendet, die automatisch die korrekte Anmeldung ermittel
   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\">" +
   GenerateAuthenticationHeader() +
   " <soap:Body>" +
   "    <RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
   "      <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" +
   "        <q1:EntityName>contact</q1:EntityName>" +
   "        <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
   "          <q1:Attributes>" +
   "            <q1:Attribute>new_number</q1:Attribute>" +
   "          </q1:Attributes>" +
   "        </q1:ColumnSet>" +
   "        <q1:Distinct>false</q1:Distinct>" +
   "        <q1:PageInfo>" +
   "          <q1:PageNumber>1</q1:PageNumber>" +
   "          <q1:Count>50</q1:Count>" +
   "        </q1:PageInfo>" +
   "        <q1:Criteria>" +
   "          <q1:FilterOperator>And</q1:FilterOperator>" +
   "          <q1:Conditions>" +
   "            <q1:Condition>" +
   "              <q1:AttributeName>contactid</q1:AttributeName>" +
   "              <q1:Operator>Equal</q1:Operator>" +
   "              <q1:Values>" +
   "                <q1:Value xmlns:q2=\"http://microsoft.com/wsdl/types/\" xsi:type=\"q2:guid\">" + myId + "</q1:Value>" +
   "              </q1:Values>" +
   "            </q1:Condition>" +
   "          </q1:Conditions>" +
   "        </q1:Criteria>" +
   "      </query>" +
   "    </RetrieveMultiple>" +
   "  </soap:Body>" +
   "</soap:Envelope>" +
   "";
   
   // Eine Instance des XMLHTTP Objektes erzeugen
    var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");

    xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
    xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
    xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
    xmlHttpRequest.send(xml);

   if(xmlHttpRequest.status == 200)
    {

      var resultXml = xmlHttpRequest.responseXML;

      var entityNodes = resultXml.selectNodes("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");

      for (var i = 0; i < entityNodes.length; i++)
      {

         var entityNode = entityNodes[i];

         var new_numberNode = entityNode.selectSingleNode("q1:new_number");
         var new_number = (new_numberNode == null) ? null : new_numberNode.text;
      
         crmForm.all.<Feldname>.DataValue = new_number;
      }
    }
}


Der Artikel ist unter diesem Link in meinem Blog erschienen.