Datumsfeld normieren nach SOAP

6. Dezember 2010 11:41

Hallo,

ich hole mir aus einer Anderen Entität via SOAP ein Datumsfeld um es anzeigen zu lassen.
Leider steht in dem Datumsfeld nicht das drin, was im Orginaldatumsfeld drin steht, sondern sowas: 2010-12-01T00:00:00+02:00

Das ist meine Abfrage:
Code:
      var myAccountId = crmForm.all.espirit_marketingallgemeinid.DataValue[0].id;
      var trim_myaccountId = myAccountId.substring(1, myAccountId.length -1);
      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>aufnahmedatum</q1:Attribute>" +
"</q1:Attributes>" +
"</q1:ColumnSet>" +
"<q1:Distinct>false</q1:Distinct>" +
"<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 xsi:type=\"xsd:string\">" +  trim_myaccountId + "</q1:Value>" +
"</q1:Values>                                          " +
"</q1:Condition>" +
"</q1:Conditions>" +
"</q1:Criteria>" +
"</query>" +
"</RetrieveMultiple>" +
"</soap:Body>" +
"</soap:Envelope>" +
"";
     
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);

var resultXml = xmlHttpRequest.responseXML;
var entityNode = resultXml.selectSingleNode("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");

var aufnahmedatumNode      = entityNode.selectSingleNode("q1:aufnahmedatum");

crmForm.all.espirit_aufnahmedatum.DataValue                = (aufnahmedatumNode == null )       ? null : aufnahmedatumNode.text;
crmForm.all.espirit_aufnahmedatum.ForceSubmit = true;     



jemand ne Idee was ich an der vorletzten Zeile ändern muss, das das NUR das Datum steht und dann auch richtig? also: 01.12.2010

Re: Datumsfeld normieren nach SOAP

6. Dezember 2010 13:14

Hallo Thomas,

im CRM werden Datumsfelder immer im UTC-Format gespeichert. Durch diese vorgehensweise ist es dem CRM System möglich, mit unterschiedlichen Zeitzonen zu arbeiten.

Um jetzt das Datum in das von dir gewünschte Format umzuwandeln, kannst du z.B. den Code aus diesen Artikel verwenden :-)

Re: Datumsfeld normieren nach SOAP

6. Dezember 2010 14:18

Danke für den Hinweis:

Aber wie baue ich das ein?
ich hab mir das jetzt so gedacht:

Code:
if (crmForm.all.espirit_marketingallgemeinid.DataValue != null)
    {
    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;
}
    crmForm.all.espirit_marketingrolle.parentElement.parentElement.parentElement.style.display = '';
      var myAccountId = crmForm.all.espirit_marketingallgemeinid.DataValue[0].id;
      var trim_myaccountId = myAccountId.substring(1, myAccountId.length -1);
      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>espirit_aufnahmedatum</q1:Attribute>" +
"</q1:Attributes>" +
"</q1:ColumnSet>" +
"<q1:Distinct>false</q1:Distinct>" +
"<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 xsi:type=\"xsd:string\">" +  trim_myaccountId + "</q1:Value>" +
"</q1:Values>                                          " +
"</q1:Condition>" +
"</q1:Conditions>" +
"</q1:Criteria>" +
"</query>" +
"</RetrieveMultiple>" +
"</soap:Body>" +
"</soap:Envelope>" +
"";
     
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);

var resultXml = xmlHttpRequest.responseXML;
var entityNode = resultXml.selectSingleNode("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");

var aufnahmedatumNode      = entityNode.selectSingleNode("q1:espirit_aufnahmedatum");

crmForm.all.espirit_aufnahmedatum.DataValue                = (aufnahmedatumNode == null )       ? null : aufnahmedatumNode.text;
var stringdate = StringToDateTimeConvert(crmForm.all.espirit_aufnahmedatum.DataValue);
crmForm.all.espirit_aufnahmedatum.ForceSubmit = true;     


}


Aber das produziert nur einen Fehler

Re: Datumsfeld normieren nach SOAP

6. Dezember 2010 19:26

so :-)
Du darfst eine Funktion nicht innerhalb einer IF-SChleife definieren

Code:
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;
}

if (crmForm.all.espirit_marketingallgemeinid.DataValue != null)
    {
    crmForm.all.espirit_marketingrolle.parentElement.parentElement.parentElement.style.display = '';
      var myAccountId = crmForm.all.espirit_marketingallgemeinid.DataValue[0].id;
      var trim_myaccountId = myAccountId.substring(1, myAccountId.length -1);
      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>espirit_aufnahmedatum</q1:Attribute>" +
"</q1:Attributes>" +
"</q1:ColumnSet>" +
"<q1:Distinct>false</q1:Distinct>" +
"<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 xsi:type=\"xsd:string\">" +  trim_myaccountId + "</q1:Value>" +
"</q1:Values>                                          " +
"</q1:Condition>" +
"</q1:Conditions>" +
"</q1:Criteria>" +
"</query>" +
"</RetrieveMultiple>" +
"</soap:Body>" +
"</soap:Envelope>" +
"";
     
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);

var resultXml = xmlHttpRequest.responseXML;
var entityNode = resultXml.selectSingleNode("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");

var aufnahmedatumNode      = entityNode.selectSingleNode("q1:espirit_aufnahmedatum");

crmForm.all.espirit_aufnahmedatum.DataValue                = (aufnahmedatumNode == null )       ? null : aufnahmedatumNode.text;
var stringdate = StringToDateTimeConvert(crmForm.all.espirit_aufnahmedatum.DataValue);
crmForm.all.espirit_aufnahmedatum.ForceSubmit = true;     


}

Re: Datumsfeld normieren nach SOAP

7. Dezember 2010 10:59

Hallo und guten Morgen,

Ok, das mit der IF Schleife hab ich mittlerweile auch raus gefunden. daran liegt es aber nicht.
ich poste mal den gesamten Code. Ist ein OnChange Event.
Code:
[color=#FF0000]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;
}[/color]

var stringdate = StringToDateTimeConvert(’2010-12-05T00:00:00+02:00′);
alert(stringdate);

if (crmForm.FormType != 4)
  {
if (crmForm.all.espirit_marketingallgemeinid.DataValue != null)
    {
    crmForm.all.espirit_marketingrolle.parentElement.parentElement.parentElement.style.display = '';
      var myAccountId = crmForm.all.espirit_marketingallgemeinid.DataValue[0].id;
      var trim_myaccountId = myAccountId.substring(1, myAccountId.length -1);
      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>espirit_rolleid</q1:Attribute>" +
"<q1:Attribute>espirit_aufnahmedatum</q1:Attribute>" +
"<q1:Attribute>espirit_kontaktdurchid</q1:Attribute>" +
"<q1:Attribute>espirit_kontaktgrundid</q1:Attribute>" +
"</q1:Attributes>" +
"</q1:ColumnSet>" +
"<q1:Distinct>false</q1:Distinct>" +
"<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 xsi:type=\"xsd:string\">" +  trim_myaccountId + "</q1:Value>" +
"</q1:Values>                                          " +
"</q1:Condition>" +
"</q1:Conditions>" +
"</q1:Criteria>" +
"</query>" +
"</RetrieveMultiple>" +
"</soap:Body>" +
"</soap:Envelope>" +
"";
     
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);

var resultXml = xmlHttpRequest.responseXML;
var entityNode = resultXml.selectSingleNode("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");

var rolleNode              = entityNode.selectSingleNode("q1:espirit_rolleid");
var aufnahmedatumNode      = entityNode.selectSingleNode("q1:espirit_aufnahmedatum");
var kontaktdurchNode       = entityNode.selectSingleNode("q1:espirit_kontaktdurchid");
var kontaktgrundNode       = entityNode.selectSingleNode("q1:espirit_kontaktgrundid");

crmForm.all.espirit_marketingrolle.DataValue               = (rolleNode == null )       ? null : rolleNode.attributes.getNamedItem("name").value;
crmForm.all.espirit_marketingrolle.ForceSubmit = true;

[color=#FF0000]//crmForm.all.espirit_aufnahmedatum.DataValue                = (aufnahmedatumNode == null )       ? null : aufnahmedatumNode.text;
var stringdate = StringToDateTimeConvert(aufnahmedatumNode);
crmForm.all.espirit_aufnahmedatum.DataValue = stringdate;
crmForm.all.espirit_aufnahmedatum.ForceSubmit = true;     [/color]

crmForm.all.espirit_kontaktdurch.DataValue                 = (kontaktdurchNode == null)          ? null : kontaktdurchNode.attributes.getNamedItem("name").value;
crmForm.all.espirit_kontaktdurch.ForceSubmit = true;     

crmForm.all.espirit_kontaktgrund.DataValue                 = (kontaktgrundNode == null)         ? null : kontaktgrundNode.attributes.getNamedItem("name").value;
crmForm.all.espirit_kontaktgrund.ForceSubmit = true;

} else if (crmForm.all.espirit_marketingallgemeinid.DataValue == null) {
crmForm.all.espirit_marketingrolle.parentElement.parentElement.parentElement.style.display = 'none';
crmForm.all.espirit_marketingrolle.DataValue = null
crmForm.all.espirit_marketingrolle.ForceSubmit = true;

crmForm.all.espirit_aufnahmedatum.DataValue = null
crmForm.all.espirit_aufnahmedatum.ForceSubmit = true;     

crmForm.all.espirit_kontaktdurch.DataValue = null
crmForm.all.espirit_kontaktdurch.ForceSubmit = true;     

crmForm.all.espirit_kontaktgrund.DataValue = null
crmForm.all.espirit_kontaktgrund.ForceSubmit = true;

}


Ichhab mal die relevatnen Teile rot gemacht.
er sagt Ungültiges Zeichen. Aber ich kapier nicht wieso.
Kann ich das überhaupt so schreiben mit der Variablen Übernahme?

Danke schön

Re: Datumsfeld normieren nach SOAP

7. Dezember 2010 11:01

Das mit der Farbe hat nicht geklappt...
Komisch.
Aber die beiden Bereiche wo COLOR steht um die geht es. Ganz oben und fast ganz unten

Re: Datumsfeld normieren nach SOAP

7. Dezember 2010 11:10

Hallo Thomas,

Color klappt natürlich nicht in einem Code-Block, da sind ja eben alle Steuerzeichen ausgeschaltet.

Bekommst du denn einen alert mit der richtigen Formatierung?

Bist du sicher, das in aufnahmedatumNode ein gültiges Datum im XML-Format steht?

Ich würde einfach mal das Debuggen einschalten oder mit entsprechende alerts ausgeben, um die einzelnen Werte zu übeprüfen.

Re: Datumsfeld normieren nach SOAP

7. Dezember 2010 12:02

Hallöchen,

ich hab es jetzt mal debuggt:
aufnahmedatum1.PNG


Also das .text gibt genau das Datum wieder. kann das vielleicht an den Anführungsstrichen liegen?
Weil das ist die Fehlermeldung:
aufnahmedatum2.PNG


Ich weiß sonst leider nicht warum das nicht geht.

help.....
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Datumsfeld normieren nach SOAP

7. Dezember 2010 13:36

Hallo Tomas,

du weißt hier
"crmForm.all.espirit_aufnahmedatum.DataValue = stringdate;"
dem Datumsfeld einen String zu, das wird nicht funktionieren. JavaScript ist zwar nicht typensicher, das CRM aber schoon.
Du musst den String entweder erst in ein Datum umwandeln oder die Funktion so umschreiben, das sie ein Datum zurückliefert.

Re: Datumsfeld normieren nach SOAP

7. Dezember 2010 14:44

Hallo,

das verstehe ich nicht, ich dachte die variable aufnahmedatumNode.txt beinhaltet schon ein datum, zumindest lt. Debug.
Und das Feld crmForm.all.espirit_aufnahmedatum.DataValue ist ein ganz normales Testfeld.

Daraus hatte ich dann geschlossen, das crmForm.all.espirit_aufnahmedatum.DataValue = Stringdate richtig ist, weil es ja von deiner Funktion gewandelt wird.

Oder was versteh ich jetzt nicht?

hast du mal ein Codebeispiel?

Danke
Thomas

Re: Datumsfeld normieren nach SOAP

7. Dezember 2010 18:43

Hallo Thomas,

die Variable beinhaltet ein Datum. Die Konvertierung auf das Deutsche Format wandelt dieses Datum aber in einen String um, und das müsstest du wieder rückgängig machen bzw. den String wieder in ein Datum umwandeln.

Re: Datumsfeld normieren nach SOAP

8. Dezember 2010 10:52

Guten Morgen.

Das habe ich leider nicht verstanden....
ich will es doch aber umwandeln...und wenn ich es nicht umwandeln soll/darf.. wie bekomme ich es denn dann in das Feld
Sorry, steh ich grad auf dem Schlauch?

Re: Datumsfeld normieren nach SOAP

13. Dezember 2010 12:09

Hallo,

ich häng da immer noch dran.
Deine Letzte Aussage hab ich leider nicht verstanden, kannst du das nochmal im Detail erklären?

danke

Re: Datumsfeld normieren nach SOAP

13. Dezember 2010 14:43

Hallo Thomas,

ich schaue einmal, ob ich heute Abend dafür zeitfinde, dann erstelle ich dir den Code.