UI5 Odata批处理更新-将返回消息连接到单个操作

时间:2018-12-25 16:33:14

标签: abap

我在OData v2模型上执行批处理更新,该模型包含多个操作。 更新是在单个变更集中执行的,因此单个失败的操作会使整个更新失败。

如果一项操作失败(由于业务逻辑),则返回一条消息。有没有办法知道哪个操作触发了消息?我得到的响应包含消息文本,而似乎没有其他有用的消息。

对于每个失败的操作都会触发错误功能,并且每次都会包含相同的消息。

也许应该以特定的方式在SAP后端发布消息? ABAP方法/ iwbep / if_message_container-> ADD_MESSAGE具有参数IV_KEY_TAB,但似乎没有影响。

编辑: 对话后澄清。 我的服务不返回消息列表,而是执行更新。如果更新操作之一失败并显示一条消息,我希望将消息连接到失败的特定更新,最好不要修改消息文本。 我收到的错误响应示例:

{
   "error":{
      "code":"SY/530",
      "message":{
         "lang":"en",
         "value":"<My message text>"
      },
      "innererror":{
         "application":{
            "component_id":"",
            "service_namespace":"/SAP/",
            "service_id":"<My service>",
            "service_version":"0001"
         },
         "transactionid":"",
         "timestamp":"20181231084555.1576790",
         "Error_Resolution":{
            // Sap standard message here
         },
         "errordetails":[
            {
               "code":"<My message class>",
               "message":"<My message text>",
               "propertyref":"",
               "severity":"error",
               "target":""
            },
            {
               "code":"/IWBEP/CX_MGW_BUSI_EXCEPTION",
               "message":"An exception was raised.",
               "propertyref":"",
               "severity":"error",
               "target":""
            }
         ]
      }
   }
}

2 个答案:

答案 0 :(得分:0)

如果您想为所有操作保留相同的确切消息,那么能够确定消息来源的最简单方法就是在后端添加特定的“标签”。

例如,您可以为每个操作使用特定值填充消息结构的PARAMETER字段。这样,您可以轻松确定网关或前端中的来源。

答案 1 :(得分:0)

如果我正确理解了您的问题,则可以尝试以下操作。

覆盖以下DPC方法:

  • changeset_begin:将cv_defer_mode设置为abap_true

  • changeset_end:重新定义它,里面没有任何内容

  • changeset_process:

在这里您可以在表中找到请求的列表,该列表中包含操作号(即您要查找的内容)以及调用的键值结构(iwbep.blablabla)。 循环遍历表,并为每个条目调用方法。

将每个操作的结果放入CT_CHANGESET_RESPONSE。

如果一项操作失败,则可以在其中提出busi_exception,然后可以在其中访问实际的操作号。

有关批处理的更多信息,您可以查看以下链接: https://blogs.sap.com/2018/05/06/batch-request-in-sap-gateway/

那是你的意思吗?