上篇说了同步调用,异步基本上步骤一样。
比如:
后最是out的,是异步调用的。
到这里以后,同样是双击,创建,弹出界面也一样,然后保存,保存后激活。
然后这里,发现没有同步时的那个proxy class、
这里直接双击proxy name即可
全部激活就行了
如果接口有改动,记得重新生成。
异步的,不像同步,执行完了就直接返回了
需要写代码执行。
大部分代码是固定的。
FORM frm_call_proxy
TABLES pt_data
STRUCTURE zsdslh0515
.
***&调用代理返回日志
***&执行ABAP PROXY返回EC5.0日志信息
DATA : ls_output TYPE zfmmm_qth_if00020_input ,
lt_zmroskjxylogl TYPE zmmshg00520_tab .
***&调用代理返回日志
***&执行ABAP PROXY返回EC5.0日志信息
DATA : ls_output TYPE zfmmm_qth_if00020_input ,
lt_zmroskjxylogl TYPE zmmshg00520_tab .
DATA : ls_proxy TYPE REF TO zco_si_djz_hg_erp_rph_data_a_o ,
ls_sys_exception TYPE REF TO cx_ai_system_fault ,
lv_subrc TYPE sy -subrc ,
lv_errlog TYPE string .
***&给返回代理赋值
CLEAR ls_output .
REFRESH lt_zmroskjxylogl .
CALL FUNCTION 'ZFM_CA_STRING_TB_STRUCT'“这里是自己封装的一个函数,把结构里字段转为string
EXPORTING
iv_type = '2'
TABLES
it_data = pt_data """""""""
et_data = lt_zmroskjxylogl .
IF NOT lt_zmroskjxylogl[] IS INITIAL .
ls_output -it_zmmthg00520 -item = lt_zmroskjxylogl .
ENDIF .
**&调用反馈代理
IF ls_output IS NOT INITIAL .
TRY .
CREATE OBJECT ls_proxy . "端口
CATCH cx_ai_system_fault INTO ls_sys_exception .
lv_subrc = '4' .
lv_errlog = ls_sys_exception ->get_text ( ) .
CATCH cx_ai_application_fault .
lv_subrc = 4 .
ENDTRY .
IF lv_subrc <> '4' .
"传输数据
TRY .
CALL METHOD ls_proxy -> si_djz_hg_erp_rph_data_a_out ”代理名称
EXPORTING
output = ls_output .
CATCH cx_ai_system_fault INTO ls_sys_exception .
lv_subrc = '4' .
lv_errlog = ls_sys_exception ->get_text ( ) .
CATCH cx_ai_application_fault .
lv_subrc = 4 .
ENDTRY .
ENDIF .
ENDIF .
ENDFORM . " FRM_CALL_PROXY