上篇说了同步调用,异步基本上步骤一样。
同步调用的时候,都行选的后缀是in的代理
比如:
后最是out的,是异步调用的。
到这里以后,同样是双击,创建,弹出界面也一样,然后保存,保存后激活。
然后这里,发现没有同步时的那个proxy class、
这里直接双击proxy name即可
然后双击out的方法
会跳到如下界面,代码是自动生成的,不用处理
全部激活就行了
如果接口有改动,记得重新生成。
异步的,不像同步,执行完了就直接返回了
需要写代码执行。
大部分代码是固定的。
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
.
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