SAP Fiori应用里日期格式的显示奥秘

举报
汪子熙 发表于 2022/02/28 17:35:06 2022/02/28
【摘要】 下图这个Fiori应用里的日期显示,Tuesday, March 1,2016,从后台返回的值为/Date(1456803000000)/那么前台显示的可读性较好的日期是如何转成而成的?奥秘就在Jerry这些单步调试的代码截图里:下图这个Opportunity的金额,在右边的明细页面里显示的是1880 USD,但为何在左边,显示的是2K这个近似值?在Chrome开发者工具的调试器里,我们能看...

下图这个Fiori应用里的日期显示,Tuesday, March 1,2016,从后台返回的值为/Date(1456803000000)/

那么前台显示的可读性较好的日期是如何转成而成的?

奥秘就在Jerry这些单步调试的代码截图里:


下图这个Opportunity的金额,在右边的明细页面里显示的是1880 USD,但为何在左边,显示的是2K这个近似值?

在Chrome开发者工具的调试器里,我们能看到从后台返回的金额确实是1880:

所以这个2k一定是前台UI5代码里进行的格式化:

答案就在上图sap.ca.ui.model.format.AmoutFormat.FormatAmoutShort这个方法里。

这里涉及到一个CLDR的概念:

CLDR - Unicode Common Locale Data Repository

The Unicode CLDR provides key building blocks for software to support the world’s languages, with the largest and most extensive standard repository of locale data available. This data is used by a wide spectrum of companies for their software internationalization and localization, adapting software to the conventions of different languages for such common software tasks.

1880转换成2k的调试:












在SAP WebIDE里随便创建一个新的Fiori应用,访问一个OData服务:

直接在WebIDE里本地运行该Fiori应用,在Chrome开发者工具里把metadata请求的url抄下来:

url如下:

https://webidetesting3028490-i042416trial.dispatcher.hanatrial.ondemand.com/sap/opu/odata/iwbep/GWSAMPLE_BASIC/$metadata?sap-language=EN

直接贴到浏览器里,也能看到返回的metadata,但有趣的是,这个Fiori应用取OData服务需要经由的Destination,在WebIDE里本地运行时抓到的url里没有体现出来。


在Fiori应用的manifest.json文件里,datasources区域维护了该OData的endpoint:

"dataSources": {
			"mainService": {
				"uri": "/sap/opu/odata/iwbep/GWSAMPLE_BASIC/",
				"type": "OData",
				"settings": {
					"odataVersion": "2.0",
					"localUri": "localService/metadata.xml"
				}
			}
		},

还有models区域,指明了该OData模型使用的dataSource为mainService:

但是在neo-app.json(我这个Fiori应用是在WebIDE里选择Neo环境创建的)文件里,仍然可以看到Destination的名称为ES5_Trial_Neo:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。