ABAPSAP RESTFUL 服务应用

Posted SAP剑客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAPSAP RESTFUL 服务应用相关的知识,希望对你有一定的参考价值。

RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用格式定义或者JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。

在SAP中对外提供Web Service需要用到ICF (Internet Commincation Framework) 。

如果要将SAP应用程序服务器作为HTTP服务提供者,就需要定义一个类(实现 IF_HTTP_EXTENSION 接口)。

 实现接口方法:

  METHOD IF_HTTP_EXTENSION~HANDLE_REQUEST.

    DATA : LV_JSON TYPE STRING.
    "Json结构
    DATA : BEGIN OF LS_REQUEST,
             DATALIST TYPE TABLE OF ZMMS_CARKWEIGHT,
           END OF LS_REQUEST.
    "传输结构
    DATA : LT_ITAB TYPE TABLE OF ZMMS_TEST
           LS_ITAB TYPE ZMMS_TEST.


    "调用的方法 GET / POST
    DATA(LV_METHOD) = SERVER->REQUEST->GET_METHOD( ).

    CASE LV_METHOD.

      WHEN 'GET'.

      WHEN 'POST'.
*        ME->POST( SERVER ).
        "获取HTTP Body
        LV_JSON = SERVER->REQUEST->GET_CDATA( ).
        IF LV_JSON IS INITIAL.
          SERVER->RESPONSE->SET_STATUS( CODE = 404 REASON = 'No Body Parameter' ).
          EXIT.
        ENDIF.
        "将Json转换成内表
        /UI2/CL_JSON=>DESERIALIZE( EXPORTING JSON = LV_JSON
                                             PRETTY_NAME = /UI2/CL_JSON=>PRETTY_MODE-CAMEL_CASE
                                    CHANGING DATA = LS_REQUEST ).
        IF LS_REQUEST-DATALIST IS NOT INITIAL.
          LT_ITAB = LS_REQUEST-DATALIST.
        ELSE.
          SERVER->RESPONSE->SET_STATUS( CODE = 404 REASON = 'Json Format Error' ).
          EXIT.
        ENDIF.

        "内表处理
        LOOP AT LT_ITAB INTO LS_ITAB.
          
        ENDLOOP.

        IF LT_CARKDATA IS NOT INITIAL.
          "保存到自定义表中,这里省略
            ......
          IF SY-SUBRC = 0.
            COMMIT WORK.
            "设置返回格式Json
            SERVER->RESPONSE->SET_CONTENT_TYPE( 'application/json' ).
            "返回Body数据
            SERVER->RESPONSE->SET_CDATA(
              /UI2/CL_JSON=>SERIALIZE( DATA = 'Success'
                                       COMPRESS = ABAP_TRUE
                                       PRETTY_NAME = /UI2/CL_JSON=>PRETTY_MODE-CAMEL_CASE )
            ).
            "返回成功状态码
            SERVER->RESPONSE->SET_STATUS( CODE = 200 REASON = 'OK' ).
          ELSE.
            "SAP数据更新失败
            SERVER->RESPONSE->SET_STATUS( CODE = 500 REASON = 'Update failed' ).
          ENDIF.
        ENDIF.

      WHEN OTHERS.
        SERVER->RESPONSE->SET_STATUS( CODE = 405 REASON = 'Method Not Allowed' ).
    ENDCASE.

  ENDMETHOD.

然后使用 SICF事务码创建服务,并且将处理器(handler)设定为自定义类。客户端就可以访问这个服务了。

 

 最后使用PostMan调用测试无误。

以上是关于ABAPSAP RESTFUL 服务应用的主要内容,如果未能解决你的问题,请参考以下文章

ABAPSAP销售订单定价值变更

ABAPSAP发送消息至RabbitMQ

ABAPSAP发送消息至RabbitMQ

ABAPSAP判断单据是否被锁定

ABAPSAP供应商自定义决裁生成实现

ABAPSAP供应商自定义决裁生成实现