Azure Logic App调用SAP RFC传表参数报错如何调整ABAP结构
报错原因
你当前的RFC请求中,ITEMS节点传入的是JSON格式的纯文本内容,但SAP LOB适配器识别到ABAP FM中ITEMS参数为表类型时,会期望该节点下是对应行结构的XML嵌套节点,而非纯文本,因此抛出找不到对应行结构节点的错误。
方案1:调整Logic App请求格式(无需ABAP端解析)
你已创建的ABAP结构和表类型本身是符合要求的,不需要修改,仅需要调整Azure侧传入的XML参数格式,将JSON文本替换为SAP适配器要求的嵌套XML结构即可,调整后的请求示例如下:
<?xml version="1.0" encoding="utf-8"?> <ZFM_MGR_RFC xmlns="http://Microsoft.LobServices.Sap/2007/03/Rfc/"> <INVOICE_ID>WZ</INVOICE_ID> <ITEMS> <ZRFC_ST_INVOICE_ITEMS xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/"> <AMOUNT>28 511,40</AMOUNT> <DESCRIPTION>Podstawowy podatek VAT 23%</DESCRIPTION> </ZRFC_ST_INVOICE_ITEMS> <ZRFC_ST_INVOICE_ITEMS xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/"> <AMOUNT>6 145,20</AMOUNT> <DESCRIPTION>Podatek VAT 8%</DESCRIPTION> </ZRFC_ST_INVOICE_ITEMS> </ITEMS> </ZFM_MGR_RFC>
调整后ABAP FM的ITEMS参数会直接接收到结构化内表数据,不需要做任何额外解析处理。
方案2:ABAP端轻量适配(无需修改Logic App逻辑)
如果你不想调整Azure侧的传参格式,可以将ITEMS参数类型保留为STRING,直接调用ABAP标准JSON解析类完成转换,不需要手动写字符串解析逻辑,示例代码如下:
FUNCTION ZFM_MGR_RFC IMPORTING VALUE(INVOICE_ID) TYPE STRING OPTIONAL VALUE(ITEMS) TYPE STRING OPTIONAL. DATA: lt_invoice_items TYPE ZRFC_TT_INVOICE_ITEMS. " 一行代码完成JSON字符串到内表的转换 /ui2/cl_json=>deserialize( EXPORTING json = items pretty_name = /ui2/cl_json=>pretty_mode-camel_case CHANGING data = lt_invoice_items ). " 后续直接使用lt_invoice_items内表即可 ENDFUNCTION.
内容的提问来源于stack exchange,提问作者TyRRRax
相关产品推荐
相关产品推荐

