如何在OData服务中返回大量消息?

2020-09-25 01:37发布

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

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


我们正在使用OData服务来调用BAPI_SALESORDER_SIMULATE。 对于非常大的订单(超过1000行),可以在参数表MESSAGETABLE中返回许多消息。 我们想将这些消息返回给服务的使用者/调用者,但是如何处理这么多消息呢?

由于没有UPDATE_DEEP_ENTITY(PUT),我们正在使用CREATE_DEEP_ENTITY(POST)。

我们研究了以下选项:

A)我们在http-header参数sap-messages中返回消息。 这显然无效,因为此参数可以包含的内容显然有限。

B)有人建议使用复杂类型-但显然它与实体(在本例中为SalesOrder)之间存在1:1关系。 这意味着我们最多只能返回一条消息。

C)然后,我们想为消息创建一个单独的实体,并将其返回到响应正文中。 但是看来,不可能返回请求中没有的任何实体。

我对A,B和C的结论有误吗-也许我错过或误解了某些东西吗?

如果我正确地说不能同时使用A,B或C来解决问题,那么该如何解决呢?

我们目前的解决方案/解决方法是,当从BAPI返回100条以上的消息时,我们仅向请求者返回一条消息,即"消息太多。无法显示"(或类似的内容)。

谢谢。

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

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


我们正在使用OData服务来调用BAPI_SALESORDER_SIMULATE。 对于非常大的订单(超过1000行),可以在参数表MESSAGETABLE中返回许多消息。 我们想将这些消息返回给服务的使用者/调用者,但是如何处理这么多消息呢?

由于没有UPDATE_DEEP_ENTITY(PUT),我们正在使用CREATE_DEEP_ENTITY(POST)。

我们研究了以下选项:

A)我们在http-header参数sap-messages中返回消息。 这显然无效,因为此参数可以包含的内容显然有限。

B)有人建议使用复杂类型-但显然它与实体(在本例中为SalesOrder)之间存在1:1关系。 这意味着我们最多只能返回一条消息。

C)然后,我们想为消息创建一个单独的实体,并将其返回到响应正文中。 但是看来,不可能返回请求中没有的任何实体。

我对A,B和C的结论有误吗-也许我错过或误解了某些东西吗?

如果我正确地说不能同时使用A,B或C来解决问题,那么该如何解决呢?

我们目前的解决方案/解决方法是,当从BAPI返回100条以上的消息时,我们仅向请求者返回一条消息,即"消息太多。无法显示"(或类似的内容)。

谢谢。

付费偷看设置
发送
4条回答
Nan4612
1楼 · 2020-09-25 02:36.采纳回答

迈克尔,你好,

您的结论是正确的,当前唯一的解决方法是

C2)您为消息建模一个单独的实体类型,从根类型到消息类型建立一个to-n导航属性,然后使用虚拟消息进行深度插入。 这样,您可以返回消息,因为消息结构是请求的一部分,因此也是响应的一部分。

我们正在使用OData V4改进服务的消息传输机制,但请在此处应用通常的免责声明:我从未说过,建议过或暗示过SAP的任何人甚至都曾考虑过随时以任何形式发布此消息。 产品:-)

希望这会有所帮助

Ralf

SC_Yao
2楼-- · 2020-09-25 02:35

嗨Ralph,

感谢您的回答和帮助。 我很高兴得到确认,我并没有错。 我将与同事讨论您对解决方法的建议。

关于OData V4,我什么也没听到,也不知道;)

谢谢

Michael

追夢秋陽
3楼-- · 2020-09-25 02:24

方法C应该作如下修改。

1。 型号如下。 这里有一个三级导航。 虚拟实体到销售订单到消息表。 带下划线的属性表示下面的JSON模型中的关键字段。

 {
 "  DummyKey ":" XXXXXX",
 " SalesOrders":[{
 "  DummyKey ":" XXXXXX",
 "  SalesOrderID ":" 1",
 " Attribute1":" <值1>",
 "消息":[{
 "  DummyKey ":" XXXXXX",
 "  SalesOrderID ":" 1",
 "  MessageId ":" 1",
 " MessageType":" E",
 " MessageText":"这是销售订单1的错误消息"
 },
 {
 "  DummyKey ":" XXXXXX",
 "  SalesOrderID ":" 1",
 "  MessageId ":" 2",
 " MessageType":" E",
 " MessageText":"这是销售订单1的另一条错误消息"
 }
 ]
 }]
 } 
槿木_熙
4楼-- · 2020-09-25 02:22

嗨,Ankit,

谢谢您的详细示例。 现在我应该不可能做错什么:)

谢谢

Michael

一周热门 更多>