SAP发布HTTP接口

附上HTTP的一些资料,对于有些abaper来说可能不太懂HTTP

1、https://www.runoob.com/http/http-tutorial.html

2、https://www.runoob.com/json/json-tutorial.html

一、创建类

1、进入SE24

 

 

2、类->接口添加IF_HTTP_EXTENSION

 

3、实现接口的HANDLE_REQUEST方法,并在源代码里编写代码,然后激活

  METHOD if_http_extension~handle_request.
    TYPES: BEGIN OF ty_data,
             matnr TYPE matnr,
             maktx TYPE maktx,
           END OF ty_data,
           BEGIN OF ty_mat,
             matnr TYPE matnr,
           END OF ty_mat.

    DATA: lt_data TYPE TABLE OF ty_data,
          lt_mat  TYPE TABLE OF ty_mat,
          ls_mat  TYPE ty_mat.

    DATA: lr_mat  TYPE RANGE OF matnr,
          lrs_mat LIKE LINE OF lr_mat.

    DATA: lt_form_fields   TYPE tihttpnvp, "请求url参数
          lt_header_fields TYPE tihttpnvp, "请求头部数据
          lv_method        TYPE string,    "请求类型
          lv_request       TYPE string,    "请求json数据
          lv_response      TYPE string.    "返回json数据

    "请求类型
    lv_method = server->request->get_method(  ).

    "请求url参数
    server->request->get_form_fields( CHANGING fields = lt_form_fields ).

    "请求头部数据
    server->request->get_header_fields( CHANGING fields = lt_header_fields ).

    "请求json数据
    lv_request = server->request->get_cdata( ).

    "json转abap
    /ui2/cl_json=>deserialize( EXPORTING json = lv_request
                               CHANGING data = lt_mat ).

    "将内表数据转成range用作查询条件
    LOOP AT lt_mat INTO ls_mat.
      lrs_mat-sign = 'I'.
      lrs_mat-option = 'EQ'.
      lrs_mat-low = ls_mat-matnr.
      APPEND lrs_mat TO lr_mat.
    ENDLOOP.

    CASE lv_method.
      WHEN 'GET'.

        SELECT matnr maktx INTO CORRESPONDING FIELDS OF TABLE lt_data
               FROM makt
               UP TO 20 ROWS
               WHERE spras = sy-langu
               AND matnr IN lr_mat.

        "abap转换json
        /ui2/cl_json=>serialize( EXPORTING data   = lt_data
                                 RECEIVING r_json = lv_response ).

        "返回json数据给调用端
        server->response->set_cdata( EXPORTING data = lv_response ).

        "请求响应
        server->response->set_status( code = 200 reason = 'OK' ).
      WHEN OTHERS.

        "如果不是get请求,则返回错误
        server->response->set_status( code = 405 reason = 'ERROR' ).

    ENDCASE.



  ENDMETHOD.

二、配置服务

1、进入SICF,运行后,选中sap,鼠标右键点击"新的子元素"

2、填写服务名称,勾"服务是管理服务"

 

3、输入描述内容,不用设置集团和账号密码

 

4、在处理类清单里添加前面创建的类后保存

 

5、激活服务

 

三、用Postman测试http接口

1、用"测试服务"获取完整的http接口

 

2、Postman添加请求

 

3、备注一下请求的名称,选择好请求类型GET,填好URL(需要在接口后面增加?sap-client=202来决定是取哪个集团数据

 

4、在Authorization里选择授权类型,并输入SAP登陆的账号密码

 

5、因为前面创建的类代码里是接收Json数据来做后面的逻辑处理,所以在Body里选择row和JSON,并按照Json的格式要求输入要查询的料号

 

6、点Send请求SAP的接口获取要查询出来的料号数据,如果HTTP的状态码是"200"表示请求成功,否则就是失败

 

posted @ 2022-09-30 11:24  鲸与海  阅读(2125)  评论(0编辑  收藏  举报