Archiv

Archive for the ‘WebService’ Category

JavaScript – XML-Datum konvertieren

6. Dezember 2010 Hinterlasse einen Kommentar

Wird per JavaScript ein Datumsfeld mit dem Webservice ermittelt, liefert das CRM das Datum in der UTC-Zeit mit der Zeitzonenverschiebung zurück, also z.B. ‚2010-12-05T00:00:00+01:00‘.
Um dieses Datum jetzt in ein deutsches Format 05.12.2010 als String umzuwandeln, kann folgender Code verwendet werden:

function DateTimeToStringConvert(source)
{
var source1 = source.split('T')[0];
var parts = source1.split('-');
var dat;
dat = parts[2];
dat = dat + '.' + parts[1];
dat = dat + '.' + parts[0];
return dat;
}

var stringdate = StringToDateTimeConvert(‚2010-12-05T00:00:00+02:00‘);

alert(stringdate);

Schlagwörter: , ,

Object Type Code ermitteln

Es kommt im CRM immer wieder vor, das der ObjectTypeCode der Entität mit übergeben werden muss. Da das CRM System diesen ObjectTypeCode beim anlegen einer Entität immer neu vergibt, kann beim übertragen der Anpassungen von einem System auf das andere nicht sichergestellt werden, das dieser Nummer die gleiche ist, so das anschließend eine Nacharbeitung der betroffenen JavaScripte erfolgen muss.

Mit folgender Funktion kann dieser Wert dynamisch ermittelt werden.

function GetObjectTypeCodeForEntity(Entity)
{
   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>" +
   "    <Execute xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
   "      <Request xsi:type=\"RetrieveEntityRequest\">" +
   "        <MetadataId>00000000-0000-0000-0000-000000000000</MetadataId>" +
   "        <EntityItems>EntityOnly</EntityItems>" +
   "        <LogicalName>" + Entity + "</LogicalName>" +
   "        <RetrieveAsIfPublished>true</RetrieveAsIfPublished>" +
   "      </Request>" +
   "    </Execute>" +
   "  </soap:Body>" +
   "</soap:Envelope>" +
   "";
    
   var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
   xmlHttpRequest.Open("POST", "/mscrmservices/2007/MetaDataService.asmx", false);
   xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Execute");
   xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
   xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
   xmlHttpRequest.send(xml);
   var resultXml = xmlHttpRequest.responseXML.selectSingleNode("//ObjectTypeCode");
   return resultXml.text;
}
 
alert("ObjectTypeCode: " + GetObjectTypeCodeForEntity("new_entity"));

Schlagwörter: , ,

Webservice in CRM 4.0 nutzen

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.
// 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;
      }
    }
}

Schlagwörter: , ,