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显示结果

原文地址:https://www.cnblogs.com/BruceKing/p/14783593.html