当绑定到ABAP日期(不是时间戳)时,是否正确地将DateTime字段绑定到DatePicker?

2020-09-26 19:08发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

决定最终提出这个问题,因为我相信我们中的许多人都在为UI5中只处理日期Edm.DateTimes的正确方法而苦苦挣扎(不需要手动操作 日期(JavaScript中的日期),所以我们开始:

我知道OData v4(带有sap.ui.model.type.Date)可能会解决所有带有日期的问题,但是现在,我想获得一个 如何正确地将ABAP中的日期值绑定到DatePicker的想法,使您可以使用UTC日期时间来避免UI5和ABAP之间的转换问题(澳大利亚下午的问题)。

换句话说-我有一个Edm.DateTime字段,该字段连接到ABAP Date数据元素,以便自动转换(我不想使Gateway服务复杂化并使用其他数据类型)。

现在,当我使用sap.m.DatePicker时,我将Edm.DateTime属性绑定到DatePicker的" dateValue"。

这很好,除了会给我一个问题 下午在A 因为日期转换不正确。

因此,如果我尝试使用以下方法绑定到dateValue:

 {path:'DateOfBirth',请键入:'sap.ui.model.type.DateTime  ',约束条件:{displayFormat:'Date'},formatOptions:{UTC:true}} 

这实际上并没有绑定。

我可以将其绑定到value和 它看起来像是可行的,但是在更新odata属性之前错过了验证日期值的整个过程,这是我需要的功能。

Graham Robinson在谈到使用Edm.DateTimeOffset时提到过,但这确实 似乎不允许您将其映射到仅包含日期的ABAP字段,因此尽管目前我也了解Edm.DateTime将来将为此退休,但我已经排除了这一点,但这可能无法完成 直到Edm.Date在Gateway(Odata v4)中可用。

任何人在这里都有最佳做法?

谢谢

Matt

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

决定最终提出这个问题,因为我相信我们中的许多人都在为UI5中只处理日期Edm.DateTimes的正确方法而苦苦挣扎(不需要手动操作 日期(JavaScript中的日期),所以我们开始:

我知道OData v4(带有sap.ui.model.type.Date)可能会解决所有带有日期的问题,但是现在,我想获得一个 如何正确地将ABAP中的日期值绑定到DatePicker的想法,使您可以使用UTC日期时间来避免UI5和ABAP之间的转换问题(澳大利亚下午的问题)。

换句话说-我有一个Edm.DateTime字段,该字段连接到ABAP Date数据元素,以便自动转换(我不想使Gateway服务复杂化并使用其他数据类型)。

现在,当我使用sap.m.DatePicker时,我将Edm.DateTime属性绑定到DatePicker的" dateValue"。

这很好,除了会给我一个问题 下午在A 因为日期转换不正确。

因此,如果我尝试使用以下方法绑定到dateValue:

 {path:'DateOfBirth',请键入:'sap.ui.model.type.DateTime  ',约束条件:{displayFormat:'Date'},formatOptions:{UTC:true}} 

这实际上并没有绑定。

我可以将其绑定到value和 它看起来像是可行的,但是在更新odata属性之前错过了验证日期值的整个过程,这是我需要的功能。

Graham Robinson在谈到使用Edm.DateTimeOffset时提到过,但这确实 似乎不允许您将其映射到仅包含日期的ABAP字段,因此尽管目前我也了解Edm.DateTime将来将为此退休,但我已经排除了这一点,但这可能无法完成 直到Edm.Date在Gateway(Odata v4)中可用。

任何人在这里都有最佳做法?

谢谢

Matt

付费偷看设置
发送
7条回答
Tong__Ming
1楼 · 2020-09-26 19:29.采纳回答

好-如果您为出生日期定义了DatePicker,则以" a"解决方案开始:

 


 

在绑定OData属性的同时,我们使用change事件将属性手动更新为UTC偏移本地时区,如下所示:

 onDatePickerChange:function(oEvent){
//格式化日期以消除UTC问题
 var oDatePicker = oEvent.getSource();
 var oBinding = oDatePicker.getBinding(" dateValue");
 var oNewDate = oDatePicker.getDateValue();
 如果(oNewDate){
 var sPath = oBinding.getContext()。getPath()+"/" + oBinding.getPath();
 var oFormatDate = sap.ui.core.format.DateFormat.getDateTimeInstance({
 模式:" yyyy-MM-ddTKK:mm:ss"
 });
 oBinding.getModel()。setProperty(sPath,new Date(oFormatDate.format(oNewDate)));
 }
 } 

请注意,如果清除了DatePicker值,我们将让默认绑定将DateOfBirth的更新处理为空。

所有操作,虽然不理想,但这是建议的解决方案 我们在OData的v4上。

悠然的二货
2楼-- · 2020-09-26 19:31

这里的工作很棒...我在Chrome上工作得很好,但在IE上却没问题。 此解决方案在两个方面都有效! ;-)

wang628962
3楼-- · 2020-09-26 19:31

一个更简单,更整洁的解决方案-

{路径:'DateOfBirth',类型:'sap.ui.model.odata.type.DateTime',约束条件:{displayFormat:'Date'},formatOptions:{pattern:'MM-dd-yyyy'}}

当学会了学习
4楼-- · 2020-09-26 19:24

嗨,马特,

在这种情况下这是行不通的,因为您的解决方案只有将其设置为yyyy-MM-ddT00:00:00才行。

所提供的解决方案在从SAP获取并在UI中显示时有效,并且我们在特定于浏览器的时区将日期转换为前一天。

ZJXianG
5楼-- · 2020-09-26 19:32

感谢Matt,此解决方案解决了我的问题 datapicker和abap后端之间的休假问题

宇峰科技
6楼-- · 2020-09-26 19:42

没问题,Kemin。 似乎可行,尽管尚未在每个时区中对夏令时和午夜进行详尽的测试(而且永远不会)...

小灯塔
7楼-- · 2020-09-26 19:27

您的帖子挽救了我的命! S2

一周热门 更多>