none
CRM 2011: Datumswert (Tag) verändert sich je Zeitzone RRS feed

  • Frage

  • Hallo Community,

    Ich habe ein Frage bezüglich Datumswerten in CRM:

    Ein Kunde von uns hat Niederlassungen in Europa und Amerika. Nun haben wir folgendes Problem: Wenn auf der Firma das Datum des Vertragsabschlusses in Europa gesetzt wird, wird in der Maske der amerikanischen Mitarbeiter durch die Verschiebung der Zeitzone der Vortag angezeigt.

    Hat hierzu jemand Erfahrungen oder Lösungsvorschläge (Scripting, Plugin, DB-Trigger, etc.)?

    Danke und liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    Dienstag, 14. Juni 2011 13:53

Antworten

  • Hallo Andreas,

    der Mitarbeiter muss nur die korrekte Zeitzone einstellen, dann wird auch das richtige Datum angezeigt.

    Das CRm speichert Datumswerte immer nur im UTC Format. Die GUI zeigt dann mithilfe der eingesetllten Zeitzone des Clients das richtige Datum und die richtige Uhrzeit an.


    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website
    • Als Antwort markiert Michael Sulz Donnerstag, 28. Mai 2015 06:45
    Dienstag, 14. Juni 2011 15:57
  • Hallo Andreas,

    ich bleibe dabei. Wenn beide Clients ihre Zeitzone korrekt eingestellt haben, wird bei beiden das gleiche Datum angezeigt. Ist dies nicht der Fall kann das nur daran liegen, das die Zeitzonen nicht richtig eingestellt sind.

    Das CRM ist darauf ausgelegt, von Benutzern in unterschiedlichen Zeitzonen genutzt zu werden, deshal wird ja das Datum und die Uhrzeit im UTC Format gespeichert.

     


    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website
    • Als Antwort markiert Michael Sulz Donnerstag, 28. Mai 2015 06:45
    Mittwoch, 15. Juni 2011 20:44
  • Hallo,

    Ich habe jetzt für mein Problem eine Lösung gefunden. Nach einigen genauen Tests konnte ich das Problem darauf einschränken, dass CRM ein Datum, wenn dieses ohne Uhrzeit definiert wird, mit 00:00 als Uhrzeit +/- die Zeitzone speichert.

    Wenn ich nun ein Datum in Wien mit GMT+01:00 speichere und der gleichen Datensatz in Central USA (GMT -06:00) geöffnet wird, rechnet die Oberfläche das Datum in die Zeitzone des aktuellen Benutzers um, d.h.: 02.06.2011 01:00 - 06:00 -> 01.06.2011 19:00.

    Dieses Problem habe ich jetzt so gelöst, dass ich beim Datum automatisch 12:00 - Zeitverschiebung speichere - somit wird in jeder Zeitzone das gleiche Datum auf der Oberfläche dargestellt:

    function SetDateForAllTimezones()
    {
      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=\"RetrieveUserSettingsSystemUserRequest\" ReturnDynamicEntities=\"true\">" + 
    "    <EntityId>"+ Xrm.Page.context.getUserId() +"</EntityId>" + 
    "    <ColumnSet xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:ColumnSet\">" + 
    "     <q1:Attributes>" + 
    "      <q1:Attribute>timezonebias</q1:Attribute>" + 
    "     </q1:Attributes>" + 
    "    </ColumnSet>" + 
    "   </Request>" + 
    "  </Execute>" + 
    " </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/Execute"); 
      xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); 
      xmlHttpRequest.setRequestHeader("Content-Length", xml.length); 
      xmlHttpRequest.send(xml); 
    
      var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
      oXmlDoc.async = false;
      oXmlDoc.loadXML(xmlHttpRequest.responseXML.xml);
      var times = oXmlDoc.getElementsByTagName("Property");
      var difference = Number(times[0].text);
      var d = new Date(crmForm.all.<Datumsfeld>.DataValue);
      d.setHours( 12 + ( (difference * -1) / 60) );
      crmForm.all.<Datumsfeld>.DataValue = d;
    }
    


    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    Montag, 20. Juni 2011 08:57

Alle Antworten

  • Hallo Andreas,

    der Mitarbeiter muss nur die korrekte Zeitzone einstellen, dann wird auch das richtige Datum angezeigt.

    Das CRm speichert Datumswerte immer nur im UTC Format. Die GUI zeigt dann mithilfe der eingesetllten Zeitzone des Clients das richtige Datum und die richtige Uhrzeit an.


    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website
    • Als Antwort markiert Michael Sulz Donnerstag, 28. Mai 2015 06:45
    Dienstag, 14. Juni 2011 15:57
  • Hallo Michael,

    Ich präzesiere mein Problem:

    Der Benutzer in Amerika (+06:00) gibt auf der Oberfläche das Vertragsdatum ohne Uhrzeit ein. Ein anderer Benutzer in Europa (+02:00) öffnet die selbe Firma auf der das Vertragsdatum gespeichert wurde. Beim europäischen Benutzer wird dann das Datum minus ein Tag angezeigt, weil die Oberfläche von Uhrzeit 00:00 in die aktuelle Uhrzeit umrechnet. Daher stimmt das Vertragsdatum von ein und der selben Firma auf zwei verschiedenen Kontinenten nicht überein.

    Meine Idee hierzu wäre beim Setzen des Vertragsdatum in Amerika automatisch die Zeitverschiebung (+06:00) als Uhrzeit zu addieren. Somit sollte dann in Europa auch der korrekte Tag angezeigt werden, oder?

    Danke und liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    Mittwoch, 15. Juni 2011 07:31
  • Hallo Andreas,

    ich bleibe dabei. Wenn beide Clients ihre Zeitzone korrekt eingestellt haben, wird bei beiden das gleiche Datum angezeigt. Ist dies nicht der Fall kann das nur daran liegen, das die Zeitzonen nicht richtig eingestellt sind.

    Das CRM ist darauf ausgelegt, von Benutzern in unterschiedlichen Zeitzonen genutzt zu werden, deshal wird ja das Datum und die Uhrzeit im UTC Format gespeichert.

     


    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website
    • Als Antwort markiert Michael Sulz Donnerstag, 28. Mai 2015 06:45
    Mittwoch, 15. Juni 2011 20:44
  • Hallo Michael,

    Ich habe es jetzt erneut getestet und es funktioniert nicht - mit folgendem Vorgehen ist das Verhalten nachzustellen:

    Ich habe als Benutzer in den Optionen die Zeitzone Wien (GMT+01:00) eingestellt und befülle ein Datumsfeld ohne Uhrzeit. Wenn ich dann bei diesem Benutzer die Zeitzone auf Central Time (GMT-06:00) umstelle und den vorher aktualisierten Datensatz aufmache ändert sich das angezeigte Datum auf den Vortag.

    Verstehe ich bei den eingestellten Zeitzonen etwas falsch - hier spielt doch die Zeitzone vom Clientrechner keine Rolle, oder?

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    Donnerstag, 16. Juni 2011 12:44
  • Hallo,

    Ich habe jetzt für mein Problem eine Lösung gefunden. Nach einigen genauen Tests konnte ich das Problem darauf einschränken, dass CRM ein Datum, wenn dieses ohne Uhrzeit definiert wird, mit 00:00 als Uhrzeit +/- die Zeitzone speichert.

    Wenn ich nun ein Datum in Wien mit GMT+01:00 speichere und der gleichen Datensatz in Central USA (GMT -06:00) geöffnet wird, rechnet die Oberfläche das Datum in die Zeitzone des aktuellen Benutzers um, d.h.: 02.06.2011 01:00 - 06:00 -> 01.06.2011 19:00.

    Dieses Problem habe ich jetzt so gelöst, dass ich beim Datum automatisch 12:00 - Zeitverschiebung speichere - somit wird in jeder Zeitzone das gleiche Datum auf der Oberfläche dargestellt:

    function SetDateForAllTimezones()
    {
      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=\"RetrieveUserSettingsSystemUserRequest\" ReturnDynamicEntities=\"true\">" + 
    "    <EntityId>"+ Xrm.Page.context.getUserId() +"</EntityId>" + 
    "    <ColumnSet xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:ColumnSet\">" + 
    "     <q1:Attributes>" + 
    "      <q1:Attribute>timezonebias</q1:Attribute>" + 
    "     </q1:Attributes>" + 
    "    </ColumnSet>" + 
    "   </Request>" + 
    "  </Execute>" + 
    " </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/Execute"); 
      xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); 
      xmlHttpRequest.setRequestHeader("Content-Length", xml.length); 
      xmlHttpRequest.send(xml); 
    
      var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
      oXmlDoc.async = false;
      oXmlDoc.loadXML(xmlHttpRequest.responseXML.xml);
      var times = oXmlDoc.getElementsByTagName("Property");
      var difference = Number(times[0].text);
      var d = new Date(crmForm.all.<Datumsfeld>.DataValue);
      d.setHours( 12 + ( (difference * -1) / 60) );
      crmForm.all.<Datumsfeld>.DataValue = d;
    }
    


    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    Montag, 20. Juni 2011 08:57