SAP2OUT同步接口测试
接上篇异步接口,本篇讲述同步接口
同理,创建相应的DT,MT,MM,
这里时候要着重讲一下目前自己的做法,做映射的时候,建立了一个ED,即External Definition-外部定义,用于连接外部字段。
ED怎么创建,导入外部WSDL。
这里我采用了eclipse建立了一个服务端,发布了一个WSDL,具体怎么操作,
见如下
https://www.cnblogs.com/BruceKing/p/14783607.html
此时SI搭建的出站入站如下
OM正常搭建。
接着搭建ID,基本相同,在CC那里使用的WSDL需要写清楚本机IIP,不能使用localhost和127.0.0.1
再下来SAP发送数据的程序部分
REPORT ZSAP2OUTSYSTEM. "定义与代理结构一致的程序变量 "接口变量定义 DATA:ZPROXY TYPE REF TO ZCO_SI_SAP2OUT_SYN_OUT."双击代理接口的服务界面 "定义输出结构 DATA:IT_OUTPUT TYPE ZMT_SAP2OUT_SYN_REQ. "传出结构 DATA:IT_INPUT TYPE ZMT_SAP2OUT_SYN_RES."传入结构 "定义异常 DATA:CX_AI_SYSTEM_FAULT TYPE REF TO CX_AI_SYSTEM_FAULT, CX_AI_APPLICATION_FAULT TYPE REF TO CX_AI_APPLICATION_FAULT. DATA:GV_ERROR_TEXT TYPE STRING. DATA:L_ERROR TYPE REF TO CX_SY_OPEN_SQL_DB. DATA:L_BINDATA TYPE XSTRING. DATA:L_CX_ROOT TYPE REF TO CX_ROOT. DATA:LT_XML2TABLE TYPE TABLE OF SMUM_XMLTB, LS_XML2TABLE TYPE SMUM_XMLTB, LT_XML_RETURN TYPE TABLE OF BAPIRET2. DATA: LV_XML TYPE STRING, LV_START TYPE SY-FDPOS, LV_END TYPE SY-FDPOS, LV_LENGHT TYPE SY-FDPOS, LV_RESULT TYPE CHAR50, LV_MESSAGE TYPE CHAR50. "为传出结构赋值 "抬头赋值 IT_OUTPUT-MT_SAP2OUT_SYN_REQ-NAME = 'xiaoxiao'. "创建代理,并调用代理方法传输数据 TRY . IF ZPROXY IS INITIAL. CREATE OBJECT ZPROXY. ENDIF. CALL METHOD ZPROXY->SI_SAP2OUT_SYN_OUT EXPORTING OUTPUT = IT_OUTPUT IMPORTING INPUT = IT_INPUT. CATCH CX_AI_SYSTEM_FAULT. CREATE OBJECT CX_AI_SYSTEM_FAULT. GV_ERROR_TEXT = |下传OA失败:接口发生异常,{ CX_AI_SYSTEM_FAULT->GET_TEXT( ) }|. CATCH CX_AI_APPLICATION_FAULT . CREATE OBJECT CX_AI_APPLICATION_FAULT. GV_ERROR_TEXT = |下传OA失败:接口发生异常,{ CX_AI_APPLICATION_FAULT->GET_TEXT( ) }|. ENDTRY. "以下都是消息处理 IF GV_ERROR_TEXT <> ''. MESSAGE: GV_ERROR_TEXT TYPE 'S' DISPLAY LIKE 'E'. STOP. ENDIF. IF IT_INPUT-MT_SAP2OUT_SYN_RES-RETURN = ' '. MESSAGE '接口没有报错,但是没有东西回传,需要再次检查对方数据' TYPE 'E' DISPLAY LIKE 'S'. ENDIF. "如果对方直接以字符串返回,直接处理即可。 IF IT_INPUT-MT_SAP2OUT_SYN_RES-RETURN <> ' '. WRITE:/ IT_INPUT-MT_SAP2OUT_SYN_RES-RETURN. ENDIF. "以下是接收对方以XML返回的结果解析 *IF IT_INPUT-MT_SAP2OUT_SYN_RES-RETURN <> ''. * CLEAR:LV_XML,LV_START,LV_END,LV_LENGHT,LV_RESULT,LV_MESSAGE,L_BINDATA,LS_XML2TABLE. * REFRESH:LT_XML2TABLE,LT_XML_RETURN. * LV_XML = IT_INPUT-MT_SAP2OUT_SYN_RES-RETURN. * CALL FUNCTION 'SCMS_STRING_TO_XSTRING' * EXPORTING * TEXT = LV_XML * IMPORTING * BUFFER = L_BINDATA * EXCEPTIONS * FAILED = 1 * OTHERS = 2. * * CALL FUNCTION 'SMUM_XML_PARSE' * EXPORTING * XML_INPUT = L_BINDATA * TABLES * XML_TABLE = LT_XML2TABLE * RETURN = LT_XML_RETURN. * IF SY-SUBRC = 0. * ENDIF. * LOOP AT LT_XML2TABLE INTO LS_XML2TABLE. * IF LS_XML2TABLE-CNAME = 'zretype'. * LV_RESULT = LS_XML2TABLE-CVALUE. * ELSEIF LS_XML2TABLE-CNAME = 'zmessage'. * LV_MESSAGE = LS_XML2TABLE-CVALUE. * ENDIF. * ENDLOOP. * IF LV_RESULT = 'S'. * MESSAGE '已经成功发送给对方,对方也收到了' TYPE 'S'. * WRITE:/ LV_MESSAGE. * ELSE. * DATA(MESSAGE) = |{ LV_RESULT }{ LV_MESSAGE }|. * MESSAGE MESSAGE TYPE 'E' . * ENDIF. *ENDIF. "最后注意清空临时变量和工作区
其中的关键点是找到对应的方法传出传入结构。
如下怎么定义呢?
"接口变量定义 DATA:ZPROXY TYPE REF TO ZCO_SI_SAP2OUT_SYN_OUT."双击代理接口的服务界面 "定义输出结构 DATA:IT_OUTPUT TYPE ZMT_SAP2OUT_SYN_REQ. "传出结构 DATA:IT_INPUT TYPE ZMT_SAP2OUT_SYN_RES."传入结构
第一种:可以进入接口查看对应方法的参数。
如上是传出传入结构,双击关联类型,可以进入次级的具体细节。
第二种:可以直接在代理界面查看。
至于接口名怎么看
最后展示测试结果
首先清空接受方信息
服务端那边也有记录
SAP显示结果