Wie behandeln Edm:DateTime form OData-Schnittstelle in SAPUI5 richtig?
Gibt es eine definition, was Werte sein sollten, senden Sie OData-Edm:DateTime einer SAP-Netweaver-Gateway-service?
Vor allem sollte es immer so interpretiert werden, UTC?
Ich nehme an, die SAPUI5-Bibliothek ist smart genug, um all dieser Zeit-zone Probleme automatisch, wenn die Schnittstelle korrekt definiert -- die Frage ist, was ist nun richtig?
Ich würde es bevorzugen, verwenden Sie code wie diesen, auf client-Seite:
new sap.m.DatePicker({
value : {
path : "BirthDate",
type : new sap.ui.model.type.Date
}
}),
Wie lösen Sie diese Probleme?
Bearbeiten
Zeitzone Handhabung scheint immer noch zu Fremd für mich.
SAP-Gateway-Server sendet in einem Edm:DateTime folgenden: 2015-04-16T00:00:00
Alle Informationen zur Zeitzone fehlt.
Wenn ich binden ein date-picker aus wie diese:
var oContent = new sap.m.DatePicker({
value : {
path : "Date",
type : new sap.ui.model.type.Date({
style: "short",
})
}
})
Bekam ich die folgende Ausgabe: 16.04.15 (die korrekt zu sein scheint).
Die Bindung einer Datumsauswahl ohne Typ-information zeigt: do Apr 16 2015 02:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)
Wenn ich das Datum ändern mit der Datum-picker 17.04.15 in der zweiten Zeile ist:
FR Apr 17 2015 00:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)
Bitte beachten Sie den Unterschied in der Zeit (2 Stunden fehlen).
Wenn ich an den server senden, bekam ich von Edm.DateTime == 2015-04-16T00:00:00
Kontrolle zeigt:
Do Apr 16 2015 02:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)
Wenn ich
new sap.m.DatePicker({
value : {
path : "Date",
type : new sap.ui.model.type.Date({
style: "short",
UTC: true
})
}
})
Daten korrekt zu sein scheint (die 2 Stunden fehlen nicht, nach Auswahl eines neuen Datums).
Frage ich mich, gibt es eine definition, welche Art von Daten-gateway zu senden?
Wenn die Zeitzone fehlt innerhalb der Edm.DateTime-Informationen, wie sollte ein client korrekt funktioniert? Vor allem, wenn die clients in unterschiedlichen Zeitzonen zur Verfügung?
Seltsam genug, ich habe ein ähnliches problem mit einem filter. Aber es gibt die UTC-flag scheint nicht zu arbeiten.
Jemand mit etwas Erfahrung zu diesem Thema? Oder irgendwelche Tipps zu einer guten Dokumentation?
* https://sapui5.netweaver.ondemand.com/sdk/#docs/guide/91f3070d6f4d1014b6dd926db0e91070.html
Sagt mehr oder weniger "kümmern", aber nicht wie :-/
Weitere Informationen
Ich festgestellt, die gleiche Frage über die SAP-Netzwerk (http://scn.sap.com/thread/3574419). Nicht sicher, ob die gegebene Antwort korrekt ist. Sieht aus wie hacking um in die meta-Daten, die nicht erforderlich sein sollte?
Ich bin noch auf der Suche nach einer Lösung für dieses problem
Ich festgestellt unterschiedliche Handhabung von Daten im Fall der Bindung und filter Verwendung.
Die verlinkten Thema werden könnte, eine doppelte rechts? Dieser hier ist zwei Jahre alt, das andere nur 3 Monate.
Das Alter der Frage nicht unbedingt entscheiden, was markiert werden soll, als Duplikat und was nicht. Siehe meta.stackexchange.com/q/147643 und meta.stackoverflow.com/q/348561.
InformationsquelleAutor user3783327 | 2015-04-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich nicht beantworten mit Bezug auf SAP, da ich nicht vertraut bin. Aber ich kann einige Einblicke auf Basis von OData.
Den
Edm:DateTime
Typ ist auf der W3C-XML-Schemaxs:dateTime
, die in-wiederum auf Nach ISO8601. Beide XML-Schema und nach ISO8601 Zustand, mal ohne Zeit-zone, werden als "local time". Das ist lokalen jemanden. Deren "lokaler" es ist absichtlich nicht definiert.Vom W3C-XML-Schema §3.2.7:
Aus der ISO 8601 3. Auflage §4.3.2:
Überlegen, Ihrem Beispiel zu
2015-04-16T00:00:00
. Der einzige Weg, zu wissen, was genaue moment in der Zeit, gemeint ist, haben Sie einige zusätzliche Kontext angewendet. Bei einem Geburtstag, könnte dies den Zeit-zone, wo sich die person gerade befindet (wo Sie Feiern Ihren Geburtstag nicht, wo Sie geboren sind). Oder, es könnte eine beliebige Position, wenn die person, die Lage ist unbekannt - vielleicht ist die Zeitzone der person, die das system benutzen.Daher, die interpretation der Wert ist, wo das Zeit-zone angewendet wird. In deinem Fall würde es scheinen, dass einige lokale Zeit-zone angewendet wird, während der Deserialisierung.
Bedenken Sie auch, dass ein Geburtstag besser vertreten und nur durch eine Kalender-Datum, eher als Mitternacht auf ein Datum. Die
Edm:Date
Typ ist besser geeignet für diese. Für andere Typen, vor allem, wenn Sie wissen, dass der Wert wird in UTC oder in einem bestimmten Zeit-zone, dannEdm:DateTimeOffset
mehr angemessen ist.Erkennen auch, dass die
Edm:DateTime
Typ war fiel von OData-Spezifikation in der version 4.0. Viele (mich eingeschlossen) halten dies ein Fehler. Ich bin mir nicht sicher, ob dieser Sie betrifft oder nicht, aber Sie sollten sich bewusst sein.Hoffe, das hilft.
Edm:Date
wurde Hinzugefügt, die auf OData-V4.0, ersetzen DateTime. Wie schriftlich SAP-Gateway verwendet immer noch V2 (mit Anmerkungen von V4). Während die OData-Implementierung ist aktiv in der Entwicklung gibt es keine bekannten Pläne zu überarbeiten, Großhandel, support V4. Angesichts der Auswirkungen des Verschwindens vonDateTime
von V4 es ist unwahrscheinlich, dass jemals passieren, wenn es möglich ist, dass Sie ' ll fügen SieDate
zu deren Umsetzung.InformationsquelleAutor Matt Johnson
Könnten Sie versuchen, binden von Datums-Pfad dateValue statt Wert.
Es sollte automatisch interpretieren Edm:DateTime.
InformationsquelleAutor Sunil Verma
Typ
sap.ui.model.type.Date({ oFormatOptions:{ style: "short", UTC: true} })
diese behalten Ihre aktuell wie es ist, die vom server gesendetInformationsquelleAutor Sunil B N