OData日期时间属性的规则

2020-09-04 12:22发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)关于实体中Edm.datetim...

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

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


关于实体中Edm.datetime属性问题的文章很多。 提供的解决方案通常视具体情况而定,因此很难弄清出问题的原因和补救措施。

这是一个简短的讨论(我希望!),它为edm.datetime属性建立了一些规则。 如果这些规则或某些其他规则有任何例外,请发布。

规则1

使用Edm类型日期时间。 不要为了方便起见将日期保持为edm.string

规则2

如果可以使用null值,则使该属性可以为null。 如果需要一个值(强制性),则不要使其为空。

规则3

仅当后端日期包含" 00000000"作为值时,才能正确评估可为空的属性。 包含空格的ABAP日期值(很遗憾允许这样做)将不会被视为null,但也不能转换为edm.datetime-您会从服务器收到运行时错误。

规则4

请注意完整属性定义。 仅为您的"日期属性"提供edm.datetime类型是不足以确保OData解析期间正确转换的。 参见规则5、6和7。

规则5

如果date属性是用于实体定义的DDIC结构的一部分,并且该组件是DATS(基本D类型),则可以直接在其中放置一个D类型值,例如

有效ABAP:

ls_entity-date = sy-datum。


这种类型的日期可能会落入规则3中提到的"日期为空但无效"陷阱中。

规则6

如果date属性是DDIC结构的不是的一部分,并且实体定义是"自由格式",则在分配其后端数据类型时,也可以直接在其中放置D类型值:例如

此类型的日期可能属于规则3中提到的"日期为空但无效"陷阱。

规则7

如果date属性不是DDIC结构的一部分,则实体定义为"自由格式",并且没有后端数据类型,则必须像填充时间戳一样填充目标。 这是因为MPC生成的属性类型是打包类型字段。 在规则5和6中,MPC生成的属性类型是D类型。

请注意,edm.datetime将包含一个表示微秒的附加部分,除非从高分辨率时间戳(即比sy-uzeit更为详细)中抽取,否则通常不会填充该部分。

此类型的日期不能落入规则3中提到的"日期为空但无效"陷阱中。

规则8

您也可以将TIMESTAMP用作DDIC结构实体库中的组件类型,而不是DATS。 可以按照规则7进行转换。

我确定我们可以在此处添加更多内容:例如,我发现" json格式"的提要日期看起来有些"奇"-是对还是错?

致谢

罗恩。

(7.1 kB)
7条回答
愤怒的猪头君
2020-09-04 12:52

嗨罗恩,

我遵循了您的规则,但出现了Dateformatt错误-实际上我在找到您的线程之前就收到了:-)

我有一个Gateway-Hub和一个IW_BEP-Backend。

在后端,根据规则5将属性绑定到结构

Edm.DateTime <-> DATS长度8

在服务实现(读取)中,我正在这样做:

er_entity-gbdat = ls_customer-gbdat。

在调试器中看起来不错:er_entity-gbdat = 19530321(例如)

但是调用服务会导致错误"格式无效:Gbdat-值:21.03.19"

如果更改为Edm.DateTimeOffset,我将收到错误" 21.0-3.-19",不能解释为数字...

好像DATS被转换为输出(21.03.1953),然后将其放入Edm。字段...

您知道发生了什么吗?

希望

阿克塞尔

SP:

后端:

IW_BEP-> 200 08

枢纽:

SAPGW_FND-> 740 07

一周热门 更多>