在Odata SAP Gateway中处理最大为INT64(9,223,372,036,854,775,807)的整数值

2020-08-14 13:30发布

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

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


data-types.jpg

您好专家

我需要就ODATA SAP网关中使用的数据类型面临的一个问题提出建议。

问题-我们已经将URL公开给第三方,并且在传入有效负载中,我们有一个整数字段,因为他们使用的数据类型为long 20,它可以处理整数值9,223,372,036,854,775,807。
因此,当他们发送JSON有效负载时,SAP会收到如下所示的有效负载。

{" Number":1234567890123456}。

如果您可以在上面的有效负载号中看到字段值是一个整数,这就是为什么它周围没有双引号""的原因。 但是在SAP中,我们在处理此字段时遇到了问题。

SAP中很少有数据类型可用于处理此数据,例如INT16(最高值为32,767)和INT32(最高值为2,147,483,647)。 使用这种数据类型,SAP可以处理不带双引号""的值,例如- {" Number":1234567890123456} 。

当我们使用INT64时,SAP需要双引号(例如 {" Number":" 1234567890123456"})处理大于INT32的值(2,147,483,647)。

所以我的问题是SAP Gateway中是否有任何选项可以接收数据类型为INT64或其他数据类型的整数值,这些整数值最多可以处理9,223,372,036,854,775,807的值而没有双引号?

请检查SAP Gateway中使用的附加EDM数据类型。

data-types.jpg (100.6 kB)

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

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


data-types.jpg

您好专家

我需要就ODATA SAP网关中使用的数据类型面临的一个问题提出建议。

问题-我们已经将URL公开给第三方,并且在传入有效负载中,我们有一个整数字段,因为他们使用的数据类型为long 20,它可以处理整数值9,223,372,036,854,775,807。
因此,当他们发送JSON有效负载时,SAP会收到如下所示的有效负载。

{" Number":1234567890123456}。

如果您可以在上面的有效负载号中看到字段值是一个整数,这就是为什么它周围没有双引号""的原因。 但是在SAP中,我们在处理此字段时遇到了问题。

SAP中很少有数据类型可用于处理此数据,例如INT16(最高值为32,767)和INT32(最高值为2,147,483,647)。 使用这种数据类型,SAP可以处理不带双引号""的值,例如- {" Number":1234567890123456} 。

当我们使用INT64时,SAP需要双引号(例如 {" Number":" 1234567890123456"})处理大于INT32的值(2,147,483,647)。

所以我的问题是SAP Gateway中是否有任何选项可以接收数据类型为INT64或其他数据类型的整数值,这些整数值最多可以处理9,223,372,036,854,775,807的值而没有双引号?

请检查SAP Gateway中使用的附加EDM数据类型。

data-types.jpg (100.6 kB)
付费偷看设置
发送
7条回答
太Q了
1楼 · 2020-08-14 14:15.采纳回答

嗨Sagar,

您所看到的行为,这意味着根据OData V2协议规范,Edm.int64是作为字符串而不是数字返回的。

https://www.odata.org/documentation/odata-version- 2-0/json-format/

请参见第4节"原始类型"

原始类型
Edm.Int64JSON序列化格式
一个64位整数,格式为 JSON字符串

如果要使用JSON数字,则可以改用OData V4协议。

有关更多详细信息,请参阅我的博客文章

https://blogs.sap.com/2017/12/12/odata-v4-code -based-implementation-overview/

最好的问候

Andre

2楼-- · 2020-08-14 14:12

行为并不奇怪。

我们刚刚实现了OData V2规范,该规范要求以字符串形式返回EDM.INT64。

https://www.odata.org/documentation/odata-version-2-0/json-format/

也许V2的规范不是您所期望的;-)。

xfwsx85
3楼-- · 2020-08-14 14:18

嗨Sagar,

您是否已在$ metadata文件中签入了EdM数据类型用于 属性?

取决于您如何构建OData服务,后端中的数据字段使用的ABAP类型与SAP Gateway框架使用的EDM数据类型之间会自动映射。

在下面的链接中,您发现Edm.Int64映射为类型P。
这意味着,如果您使用结构绑定,并且结构中的字段为p类型,则应将其映射为以下类型的Edm.Int64: 您的OData服务。

Edm.Int64包含一个带符号的64位整数值。TYPEKIND_PACKED内部类型P如果打包的内容不包含小数

映射和ABAP类型编辑器

ABAP字典类型 到EDM。类型映射

问候,

安德烈

哎,真难
4楼-- · 2020-08-14 14:26

我没想到您的回答" SAP不接受[它 ]"问到"您如何得出SAP期望双引号的结论"。 我的意思是:" SAP不接受[it]"的症状是什么?

Doze时光
5楼-- · 2020-08-14 14:23

好吧,SAP不接受-我的意思是它可以接受,但是当我报出语法错误时 不要为EDM.INT64数据类型添加双引号。 然后我尝试添加双引号,然后就可以了。 而且,当我们选择EDM.INT64时,SAP Gateway会在运行时自动映射ABAP数据类型Packed 19,这不是整数。

在JSON有效负载中,对于整数类型以外的数据类型,我们不能传递没有双引号的字段值。

因此,我得出的结论是SAP期望INT64数据类型使用双引号。

让我知道是否需要更多说明。

huskylover
6楼-- · 2020-08-14 14:22

谢谢您的回答,

问题是我使用的是ECC版本7.00,但它没有INT8数据类型。 但是它在SAP netweaver 7.3及更高版本中存在。

不过,谢谢您的博客。

clasier
7楼-- · 2020-08-14 14:07

安德烈,

是的,我已经检查了我的EDM数据类型,当前正在使用EDM.INT16数据类型,该数据类型在SAP中具有Integer数据类型映射。

我只需要使用Integer数据类型,它可以处理最多9,223,372,036,854,775,807的值。 有使用EDM.INT64的选项,但是当我选择EDM.INT64时,SAP不接受 {" Number":1234567890123456} 之类的有效负载,因为映射的ABAP数据类型已打包。

因此可以接受JSON有效负载 {" Number":1234567890123456},解决方案是什么。

具有EDM.INT16,SAP接受JSON有效载荷,其最大续续号为 {" Number": 2147483647 }。 超出 2,147,483,647时,将引发错误"溢出转换为'1002323456734'。

谢谢

一周热门 更多>