您的当前位置:首页Abap Proxy操作手册

Abap Proxy操作手册

2021-10-12 来源:乌哈旅游
Abap Proxy 程序简介 ByGuoxiaoxiaoon20070411/***************************Abap Proxy 操作涉及到四种场景.下面逐一介绍.

ABAP PROXY是一种基于SAP WEB 应用服务器6.2版本以上自带的Adaptor,它负责将ABAP语言格式转化为XI识别的XML格式,用于与XI系统的消息传递

一. Asynchronous outbound ABAP Proxy (从SAP主动发出信息,不用等待返回信息)

在 报表或者增强中 调用方法. 只是把数据传送给XI DATA: gt_result TYPE TABLE OF zdt_hss_sharecenter_item. DATA: return TYPE bapireturn.

...... “进行取数的操作.结果放到 GT_RESULT中

IF NOT gt_result[] IS INITIAL.

CALL METHOD zcl_proxy_generator=>proxy_call EXPORTING

prx_r3name = 'ZCO_MI_HSS_SHARECENTER' “在OUTBOUND中找 structure_name = 'ZMT_HSS_SHARECENTER' message_type_name = 'MT_HSS_SHARECENTER' item_name = 'ITEM' data_table = gt_result IMPORTING

return = return. COMMIT WORK. ENDIF.

这段程序就可以把gt_result中的结果数据传给XI.由XI传给第三方系统. 下面在TCODE: sproxy 中察看对应的METHOD中的参数位置. 具体代码间后面(异步SAP主动发出)

GT_RESULT的参

考结构

也可以都在OUTBOUND中查找到相关的参数.当INBOUND和OUTBOUND都存在的时候推荐都在OUTBOUND中找.参数都是对应于OUTBOUND的.不要混淆.

这个是METHOD 中的 message_type_name

二. Asynchronous inbound ABAP Proxy (从其他系统只接收信息,不用返回) 异步 代码在INBOUND中. 双击下图中: ZCL_MI_HSS_TREAFLOW_INV 在方法中写下面代码 这个例子:3rd发给sap之后sap再返回给3rd..

DATA:GT_ZJL TYPE TABLE OF ZDT_HSS_TREAFLOW_INV_ROW.

DATA:GT_RESP TYPE TABLE OF ZDT_HSS_TREAFLOW_RESP_DOCLIST.“在outbound中 DATA:GT_RETURN_XI TYPE ZDT_HSS_TREAFLOW_FAULT. DATA:GS_RETURN_XI TYPE ZDT_HSS_TREAFLOW_FAULT_ROW.

GT_ZJL = INPUT-MT_HSS_TREAFLOW_INV-ROW. “传入的参数在下图中(inbound) “传入的参数:structure下importing开始,对应ABAP KEY中的name

... ... “取数到GT_RESP if gt_RESP[] is not initial.

CALL METHOD zcl_proxy_generator=>proxy_call EXPORTING

prx_r3name = 'ZCO_MI_HSS_TREAFLOW_RESP' “在OUTBOUND中找 structure_name = 'ZMT_HSS_TREAFOW_RESP' “在OUTBOUND中找 message_type_name = 'MT_HSS_TREAFOW_RESP' “在OUTBOUND中找 item_name = 'DOCLIST' data_table = gt_resp IMPORTING

return = return1. endif.

COMMIT WORK.

IF GT_RETURN_XI is not initial.

RAISE EXCEPTION TYPE ZCX_FM_HSS_TREAFLOW EXPORTING addition = GT_RETURN_XI. ENDIF.

具体代码见最后的文本文档(异步3rd给SAP在返回消息给3rd)

INBOUND 中

Incound传入参数

GT_ZJL

引用结构

Message Type 中 找到对应于outbound的

Outbound 中

三. Synchronous Outbound ABAP Proxy (SAP主动发出信息,并且等待返回)

这个是一个报表触发的.具体程序见后面附件(同步SAP主动发出) DATA: gt_return TYPE zmt_hss_invoice_forward,

i_output TYPE TABLE OF zdt_hss_invoice_forward_item, g_resp TYPE zmt_hss_invoice_forward_resp. DATA: prxy TYPE REF TO zco_mi_hss_invoiceforward.

*赋值给PRXOY 中的ITEM,用于传出多条记录

gt_return-mt_hss_invoice_forward-item = i_output. TRY.

CREATE OBJECT prxy.

CALL METHOD prxy->execute_synchronous EXPORTING

output = gt_return “传给XI-第三方的表 IMPORTING

input = g_resp. “经XI返回的表 COMMIT WORK.

CATCH cx_ai_system_fault .

DATA fault TYPE REF TO cx_ai_system_fault . CREATE OBJECT fault.

WRITE :/ fault->errortext. ENDTRY.

Method的输入部分

Method输入参数的结构

i_output 参考结构.

II 还可以用另外一种方法与 情景 一 类似,变化只是把输入参数EXECUTE_MODE = ‘S’. (S:同步;A:异步)

DATA: gt_result TYPE TABLE OF zdt_hss_invoice_forward_item. DATA: return TYPE bapireturn.

...... “进行取数的操作.结果放到 GT_RESULT中

IF NOT gt_result[] IS INITIAL.

CALL METHOD zcl_proxy_generator=>proxy_call EXPORTING

prx_r3name = ' ZCO_MI_HSS_INVOICEFORWARD ' “在OUTBOUND中找 structure_name = ' ZMT_HSS_INVOICE_FORWARD ' message_type_name = ' MT_HSS_ INVOICEFORWARD ' EXECUTE_MODE = ‘S’. item_name = 'ITEM' data_table = gt_result IMPORTING

return = return DATA_TABLE_IN = g_resp COMMIT WORK. ENDIF.

四. Synchronous Inbound ABAP Proxy (SAP从其他系统接收信息,并且返回信息) 同步 注意: 第三方系统发消息给SAP并且是同步的情况: 在inbound中同时有 INPUT和OUTPUT 在程序中直接赋值就可以发送返回给第三方系统的消息!

DATA: i_item TYPE TABLE OF zdt_shangliuinvoiceapar_item. DATA: itab_row TYPE TABLE OF zdt_shangliuinvoiceapar_row.

i_item = input-mt_shangliuinvoiceapar_req-item. “传入的数据

…… “ 取数,结果放到 itab_row

output-mt_shangliuinvoiceapar_resp-row = itab_row.

具体例子见后面文档(同步3rd给SAP在返回消息给3rd)

Inbound中输

入的参数

注: 输入,输出的参数都在INBOUND中- importing & exporting 输出的参 数

Class Interface : ZCL_PROXY_GENERATOR

方法PROXY_CALL 参数

方法GENERATE_RETURN 参数

下面为2个Method 对应的程序

有几点需要注意的:

1. INBOUND 中对应的是Interface ; OUTBOUND中对应的是Class.

2. INBOUND中有Proxy-Interface 和Implementing class 两者点进去都是相应的Method.具体的关系还没有理清

3. 只有在INBOUND中(即从XI接收消息的时候) 才是在SPROXY中对应的方法中写程;在OUTBOUND中(即给XI发出消息的时候) 只能在报表或者增强中写程序调用那个method(proxy_call)去做

4. 我们一般做的: 第三方系统 发给 SAP 之后,SAP再给第三方系统返回消息(异步情况). 这样的情况是成对出现在proxy中,在inbound中写收到部分,在调用那个方法完成发出的部

分. 具体的参数在对应的inbound和outbound中可以看到.

5. SAP发给第三方系统一般都是异步的.这个一般都是通过报表或者增强去做.

因篇幅问题不能全部显示,请点此查看更多更全内容