目前我正在实现一个非托管的 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( ) )的对象。
其次,数据格式看起来取决于错误,这是我测试过的一些场景。
除了无效的 RequestedQuantityUnit 之外,一切都正确。
500 HTTP 状态
MSGID BM
味精 302
MSGV1 个人计算机
MSGV2 ZH
味精3
味精4
除了空白材料外,一切都正确。
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":""}]}}}
- 未输入任何属性。
尽管它们在行为定义中设置为强制,但 /iwbep/cx_gateway 不会被捕获。
我试图包含尽可能多的细节,但只是为了澄清,这两个问题是:
a) 我需要一种一致的方式来捕获所有异常,因此我可以填充消息表,它将返回的消息设置回 UI。
b) 我需要能够捕获所有未填充的必填字段。
先感谢您。enter code here