zoukankan      html  css  js  c++  java
  • 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显示结果

  • 相关阅读:
    Kafka-1
    消息队列
    分布式分类
    认识分布式
    数据库引擎
    Django插入多条数据—bulk_create
    Django中update和save()同时作用
    联合唯一去重的SQL
    Direct3D11学习:(三)Direct3D11初始化
    Direct3D11学习:(零)常见问题及解决方法整理
  • 原文地址:https://www.cnblogs.com/BruceKing/p/14783593.html
Copyright © 2011-2022 走看看