zoukankan      html  css  js  c++  java
  • 20170313 ABAP以jason 格式返回值到http(接口内容返回)

     问题1:

    返回jason 格式信息给你们这步不通,

    这个可以怎么处理,

    ***得到SCP 系统开发回复,他们需要调整方法;

     (1)调用函数做RETURN,

      IT_ZSMLSCPNOTICE-FUNCTIONNAME = 'ZMLSCP1_FR0005'.
        IT_ZSMLSCPNOTICE-BCPCODE = BCPCODE.
        IT_ZSMLSCPNOTICE-STATUS = O_STATU.
        IT_ZSMLSCPNOTICE-MSG = O_MSG.
        IT_ZSMLSCPNOTICE-RESULT = ''.
        APPEND IT_ZSMLSCPNOTICE.
        CLEAR:IT_ZSMLSCPNOTICE.
    
        CALL FUNCTION 'ZMLSCP1_FR0018'
          EXPORTING
            L_FNAME  = 'ZMLSCP1_FR0018'
          IMPORTING
            EV_MSGTY = L_MSGTY
            EV_MSGTX = L_MSGTX
          TABLES
            IT_INPUT = IT_ZSMLSCPNOTICE.
    *    O_STATU = L_MSGTY.
        O_MSG = '调用返回结果函数: ' &&  L_MSGTX.
    FUNCTION ZMLSCP1_FR0018 .
    *"----------------------------------------------------------------------
    *"*"本地接口:
    *"  IMPORTING
    *"     VALUE(L_FNAME) TYPE  RS38L_FNAM OPTIONAL
    *"  EXPORTING
    *"     VALUE(EV_MSGTY) TYPE  CHAR1
    *"     VALUE(EV_MSGTX) TYPE  STRING
    *"  TABLES
    *"      IT_INPUT STRUCTURE  ZSMLSCPNOTICE OPTIONAL
    *"----------------------------------------------------------------------
      DATA: JSON_SER TYPE REF TO CL_TREX_JSON_SERIALIZER,
            JSON_DES TYPE REF TO CL_TREX_JSON_DESERIALIZER.
    
      DATA: LV_URL TYPE STRING."http 服务接口地址
      DATA: LO_HTTP_CLIENT  TYPE REF TO IF_HTTP_CLIENT.
    
      DATA: LV_LEN TYPE I."发送报文长度
      DATA: LV_RESPON TYPE STRING.
      DATA: LV_SUBRC TYPE SY-SUBRC.
      DATA: LV_JSON_STR TYPE STRING. "发送报文
    
      IF L_FNAME EQ SPACE.
        L_FNAME = 'ZMLSCP1_FR0018'.
      ENDIF.
    
    * 设置HTTP接口地址
      SELECT SINGLE ZADDR INTO LV_URL
        FROM ZMLSCP_URL_CFG
        WHERE SYSID EQ SY-SYSID AND FUNCTIONNAME EQ L_FNAME.
      IF LV_URL IS INITIAL.
        EV_MSGTY = 'E'.
        EV_MSGTX = SY-SYSID && '表ZMLSCP_URL_CFG未配置服务地址'.
        EXIT.
      ENDIF.
    
    * 内表->JSON 设置报文内容(json格式字符串)
      CREATE OBJECT JSON_SER
        EXPORTING
          DATA = IT_INPUT[].
      CALL METHOD JSON_SER->SERIALIZE.
      CALL METHOD JSON_SER->GET_DATA
        RECEIVING
          RVAL = LV_JSON_STR.
    
      "创建客户端请求
      CALL METHOD CL_HTTP_CLIENT=>CREATE_BY_URL
        EXPORTING
          URL                = LV_URL
        IMPORTING
          CLIENT             = LO_HTTP_CLIENT
        EXCEPTIONS
          ARGUMENT_NOT_FOUND = 1
          PLUGIN_NOT_ACTIVE  = 2
          INTERNAL_ERROR     = 3
          OTHERS             = 4.
      IF SY-SUBRC <> 0.
        CALL FUNCTION 'MESSAGE_TEXT_BUILD'
          EXPORTING
            MSGID               = SY-MSGID
            MSGNR               = SY-MSGNO
            MSGV1               = SY-MSGV1
            MSGV2               = SY-MSGV2
            MSGV3               = SY-MSGV3
            MSGV4               = SY-MSGV4
          IMPORTING
            MESSAGE_TEXT_OUTPUT = EV_MSGTX.
        EV_MSGTY = 'E'.
        EXIT.
      ENDIF.
    
      "设定传输请求内容格式以及编码格式
      LO_HTTP_CLIENT->REQUEST->SET_CONTENT_TYPE( CONTENT_TYPE = 'application/json; charset=utf-8' ).
    
      "设定调用服务
      LO_HTTP_CLIENT->REQUEST->SET_METHOD( IF_HTTP_REQUEST=>CO_REQUEST_METHOD_POST ).
    
      "设置待传输内容
      LV_LEN = STRLEN( LV_JSON_STR ).
      CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_CDATA
        EXPORTING
          DATA   = LV_JSON_STR
          OFFSET = 0
          LENGTH = LV_LEN.
    
      "发送请求
      LO_HTTP_CLIENT->SEND(  EXCEPTIONS HTTP_COMMUNICATION_FAILURE = 1
                                        HTTP_INVALID_STATE         = 2 ).
    
      IF SY-SUBRC <> 0.
        "操作失败,获取失败原因
        LO_HTTP_CLIENT->GET_LAST_ERROR( IMPORTING MESSAGE = EV_MSGTX ).
        EV_MSGTY = 'E'.
        EXIT.
      ENDIF.
    
      "读取远程服务返回的处理过结果。
      LO_HTTP_CLIENT->RECEIVE( EXCEPTIONS HTTP_COMMUNICATION_FAILURE = 1
                                          HTTP_INVALID_STATE         = 2
                                          HTTP_PROCESSING_FAILED     = 3 ).
    
      IF SY-SUBRC <> 0 .
        LO_HTTP_CLIENT->GET_LAST_ERROR( IMPORTING MESSAGE = EV_MSGTX ).
        EV_MSGTY = 'E'.
        EXIT.
      ELSE.
        "读取返回返回内容
        CLEAR LV_RESPON.
        LV_RESPON = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ).
        MOVE LV_RESPON TO EV_MSGTX.
        EV_MSGTY = 'S'.
      ENDIF.
    
    ENDFUNCTION.
     11:37:47
    返回JASON 内容
    [{functionname: "ZMLSCP1_FR0005", bcpcode: "20170313001", status: "S", msg: "写入自建表成功!", result: ""}]
    11:40:14
    现在返回内容到这个地址http://deiap.changhong.com:18082/PM/ScpFunction/DispatchNotice 

    20170313 测试问题:

      

    LV_RESPON: {"isSuccessful":true,"Msg":"数据取得中..."}

    SCP 那边反馈拿不到数据!!!

  • 相关阅读:
    POJ 1654 Area 多边形面积 G++会WA
    POJ 3348 Cows 求凸包面积
    POJ 1279 Art Gallery 半平面交 多边形的核
    hdu 1556 Color the ball 线段树 区间更新
    POJ 1474 Video Surveillance 半平面交
    POJ 3130 How I Mathematician Wonder What You Are! 半平面交
    在React项目中,如何优雅的优化长列表
    react高亮显示关键词
    通过a标签同源和跨域下载服务器文件(基于blob)
    前端性能优化之回流和重绘
  • 原文地址:https://www.cnblogs.com/rainysblog/p/6542009.html
Copyright © 2011-2022 走看看