1

目前我正在实现一个非托管的 CREATE 行为,但目前错误处理太笼统了..

TRY 

...
 DATA(request) = client_proxy->create_resource_for_entity_set( 'A_SALESORDERITEM' )->create_request_for_create( ).

APPEND 'SALESORDER'            TO so_item_properties.
APPEND 'MATERIAL'              TO so_item_properties.
APPEND 'REQUESTEDQUANTITY'     TO so_item_properties.
APPEND 'REQUESTEDQUANTITYUNIT' TO so_item_properties.
...
          request->set_business_data(
            is_business_data    = items
            it_provided_property = so_item_properties
          ).

...
CATCH /iwbep/cx_gateway.
        APPEND VALUE #(
          symsg-msgty      = 'E'
          symsg-msgid      = '/N4C02/CM_HTTP_COMM'
          symsg-msgno      = '006'
          severity         = if_abap_behv_message=>severity-error
          cid              = sales_order_item_out-cid
        ) TO messages.

        APPEND VALUE #(
            %cid    = sales_order_item_out-cid
            %create = if_abap_behv=>mk-on
        ) TO failed-salesorderitem.
    
...
ENDTRY.

以上仅针对 Fiori Elements 应用程序中报告的所有网关错误引发一般错误。

如何专门处理 iwbep/cx_gateway 中捕获的每个网关异常?

例如,网关当前正在抛出异常

No language-specific unit defined in language EN for internal unit T  

...这是用于输入不存在的 T 数量单位。

问题是最终用户没有看到这个......他们得到的只是一般的“网关异常”错误。

我知道我可以使用类似...

CATCH /iwbep/cx_gateway INTO DATA(lx_gateway).

但是,我对上面 lx_gateway 中返回的内容有很多问题。

首先,访问它是有问题的,因为它是一个带有检索数据的附加方法(例如 get_text( ) )的对象。

其次,数据格式看起来取决于错误,这是我测试过的一些场景。

  1. 除了无效的 RequestedQuantityUnit 之外,一切都正确。

    500 HTTP 状态

    MSGID BM

    味精 302

    MSGV1 个人计算机

    MSGV2 ZH

    味精3

    味精4

  2. 除了空白材料外,一切都正确。

400 HTTP 状态

与上面的错误不同,没有返回消息属性,但我们确实有一个

HTTP_ERROR_BODY property.

{"error":{"code":"V1/320","message":{"lang":"en","value":"No item category available (Table T184 OR TEXT )"},"innererror":{"application":{"component_id":"SD-SLS-SO","service_namespace":"/SAP/","service_id":"API_SALES_ORDER_SRV","service_version":"0001"},"transactionid":"64205A9E09A00030E0061F9CEDB7A798","timestamp":"","Error_Resolution":{"SAP_Transaction":"","SAP_Note":"See SAP Note 1797736 for error analysis (https://service.sap.com/sap/support/notes/1797736)"},"longtext_url":"/sap/opu/odata/iwbep/message_text;o=BACKEND/","errordetails":[{"ContentID":"","code":"/IWBEP/CX_MGW_BUSI_EXCEPTION","message":"No item category available (Table T184 OR TEXT )","longtext_url":"/sap/opu/odata/iwbep/message_text;o=BACKEND/","propertyref":"","severity":"error","transition":false,"target":""}]}}}
  1. 未输入任何属性。

尽管它们在行为定义中设置为强制,但 /iwbep/cx_gateway 不会被捕获。

我试图包含尽可能多的细节,但只是为了澄清,这两个问题是:

a) 我需要一种一致的方式来捕获所有异常,因此我可以填充消息表,它将返回的消息设置回 UI。

b) 我需要能够捕获所有未填充的必填字段。

先感谢您。enter code here

4

0 回答 0