码迷,mamicode.com
首页 > 其他好文 > 详细

SAP UI5应用里类型为Edm.DateTime的日期控件设计原理

时间:2020-09-17 17:05:10      阅读:27      评论:0      收藏:0      [点我收藏+]

标签:turned   port   cat   object   type   end   int   rom   exactly   

Recently I was struggled with a customer incident and finally I realized that I didn’t understand the Edm.DateTime quite clearly. So I spend some time to do research on it to fix my knowledge gap. I list my learning here in case any other guy needs it as well.
For my study, I use this field in my application for example.

技术图片

It is bound to json model field “ClosingDate” with a formatter.

技术图片

In the metadata, this field is defined with type Edm.DateTime (Represents date and time with values ranging from 12:00:00 midnight, January 1, 1753 A.D. through 11:59:59 P.M, December 9999 A.D.)

技术图片

After I change the closingDate to 2015-10-3 and save the change:

技术图片

The saved opportunity is reread from backend with an odata request. In Chrome network tab I observed the closingDate has this format: /Date(1443830400000)/:

技术图片

What makes me curious is when I directly paste the url of the odata request to Chrome or SAP gateway client, I get the closingDate with this format instead. The figure below is response in Chrome:

技术图片

And this is response from gateway client.

技术图片

Why is there difference between them?
And when I type “alert(new Date(1443830400000));” in chrome console, I get this popup:

技术图片

Actually it ( 2015-10-03 08:00:00 GMT +0800 ) points to exactly the same time as 2015-10-03 00:00:00 UTC.

So how could the date with format /Date(1443830400000)/ be consumed in my application?

It makes sense to start debugging via the framework handler when the response of odata request ( Opportunity re-read after closing date is changed ) is successfully returned:

技术图片

check the body field:

技术图片

The aim is to figure out how framework parses this /Date(1443744000000)/.
Then I reached the place:

(1) there is a regular expression which extracts the number 1443744000000 from the input string.

(2) a local time is returned by new Date(), with the number parsed by previous step passed in. The local time is returned based on current Time zone configured in my laptop.

技术图片

Thanks to the framework, which has parsed the raw json response string to Javascript object, so that we application could directly use the converted object to bind our model.

技术图片

Then the local time returned by framework will be passed into my formatter so now I could do any formatting based on customer requirement:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V7xzygvx-1596956679633)(https://upload-images.jianshu.io/upload_images/2085791-bfe738ad92f3cb66.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

要获取更多Jerry的原创文章,请关注公众号"汪子熙":
技术图片

SAP UI5应用里类型为Edm.DateTime的日期控件设计原理

标签:turned   port   cat   object   type   end   int   rom   exactly   

原文地址:https://www.cnblogs.com/sap-jerry/p/13625688.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!