点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
您好专家
我需要就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)
嗨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
行为并不奇怪。
我们刚刚实现了OData V2规范,该规范要求以字符串形式返回EDM.INT64。
https://www.odata.org/documentation/odata-version-2-0/json-format/
也许V2的规范不是您所期望的;-)。
嗨Sagar,
您是否已在$ metadata文件中签入了EdM数据类型用于 属性?
取决于您如何构建OData服务,后端中的数据字段使用的ABAP类型与SAP Gateway框架使用的EDM数据类型之间会自动映射。
在下面的链接中,您发现Edm.Int64映射为类型P。
这意味着,如果您使用结构绑定,并且结构中的字段为p类型,则应将其映射为以下类型的Edm.Int64: 您的OData服务。
Edm.Int64包含一个带符号的64位整数值。TYPEKIND_PACKED内部类型P如果打包的内容不包含小数
映射和ABAP类型编辑器
ABAP字典类型 到EDM。类型映射
问候,
安德烈
我没想到您的回答" SAP不接受[它 ]"问到"您如何得出SAP期望双引号的结论"。 我的意思是:" SAP不接受[it]"的症状是什么?
好吧,SAP不接受-我的意思是它可以接受,但是当我报出语法错误时 不要为EDM.INT64数据类型添加双引号。 然后我尝试添加双引号,然后就可以了。 而且,当我们选择EDM.INT64时,SAP Gateway会在运行时自动映射ABAP数据类型Packed 19,这不是整数。
在JSON有效负载中,对于整数类型以外的数据类型,我们不能传递没有双引号的字段值。
因此,我得出的结论是SAP期望INT64数据类型使用双引号。
让我知道是否需要更多说明。
谢谢您的回答,
问题是我使用的是ECC版本7.00,但它没有INT8数据类型。 但是它在SAP netweaver 7.3及更高版本中存在。
不过,谢谢您的博客。
安德烈,
是的,我已经检查了我的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'。
谢谢
一周热门 更多>