ABAP:对外发布Restful

一、创建全局类

SE24创建全局类

实现IF_HTTP_EXTENSION接口

创建GET和POST方法

两个方法都添加参数

修改IF_HTTP_EXTENSION~HANDLE_REQUEST方法的代码

复制代码
METHOD if_http_extension~handle_request.
  DATA(lv_method) = server->request->get_method( )."查看调用方法GET OR POST
  CASE lv_method.
    WHEN 'GET'.
      me->get( server ).
    WHEN 'POST'.
      me->post( server ).
    WHEN OTHERS.
      "Sets current HTTP status code
      server->response->set_status( code = 405 reason = '请求方法不支持,请联系管理员!' ).
  ENDCASE.

ENDMETHOD.

修改POST方法的代码:

复制代码
  METHOD post.

    DATA: lr_json_ser TYPE REF TO cl_trex_json_serializer,
          lr_json_des TYPE REF TO cl_trex_json_deserializer.
    DATA: lv_json_string TYPE string.

    DATA: gt_t005u TYPE TABLE OF t005u.
    DATA: lv_request TYPE string.
    DATA: BEGIN OF ls_request,
            spras TYPE spras,
            land1 TYPE land1,
          END OF ls_request.

    DATA lt_request LIKE STANDARD TABLE OF ls_request. " 该内表格式要和外部传入参数格式一致

*&--- 获取调用时候传入的参数
    CLEAR: lt_request.

    lv_json_string = server->request->get_cdata( ). " 获取传入的 JSON 格式数据
    /ui2/cl_json=>deserialize(    " 把 JSON 格式的转化为 ABAP 内表, 把 LV_JSON_STRING 放入 LT_REQUEST 里面
                      EXPORTING
                        json = lv_json_string
                        pretty_name = /ui2/cl_json=>pretty_mode-camel_case
                      CHANGING
                        data = ls_request ).

    APPEND ls_request TO lt_request.

*&--- 设置返回数据格式
    CALL METHOD server->response->if_http_entity~set_content_type
      EXPORTING
        content_type = 'application/json'.

*&--- 获取要返回的数据
    IF lt_request[] IS NOT INITIAL.
      CLEAR: gt_t005u.

      SELECT *
        INTO TABLE gt_t005u
        FROM t005u
        UP TO 5 ROWS
        FOR ALL ENTRIES IN lt_request
        WHERE spras = lt_request-spras
          AND land1 = lt_request-land1.
    ENDIF.
      SELECT *
        INTO TABLE gt_t005u
        FROM t005u
        UP TO 5 ROWS.

*&--- 要返回的数据转换成 JSON 格式
    CLEAR: lv_json_string.

    CREATE OBJECT lr_json_ser
      EXPORTING
        data = gt_t005u[].
    CALL METHOD lr_json_ser->serialize.
    CALL METHOD lr_json_ser->get_data
      RECEIVING
        rval = lv_json_string.

*&--- 设置返回数据
    server->response->set_cdata(
            EXPORTING
              data   = lv_json_string    " Character data
          ).


  ENDMETHOD.

二、发布服务

输入事务码:SICF

创建服务

输入服务名

输入之前创建的全局类

存储成功后激活服务

三、测试服务

测试服务

拿到URL后在POSTMAN测试

相关推荐
slacker-kian7 天前
[实践]-让 SAP 工程 Skill 脱离 opencode跑在自定义Agent 上
ai·llm·sap·agent·abap·adt·opencode
爱喝水的鱼丶7 天前
SAP-ABAP:MM 模块供应商主数据开发:字段扩展、分级管控与同步接口开发
开发语言·性能优化·接口·sap·abap·增强·经验交流
爱喝水的鱼丶9 天前
SAP-ABAP:SAP 权限控制深度解析:自定义程序与标准事务码的边界与协同
性能优化·sap·abap·权限·开发交流·交流学习
爱喝水的鱼丶11 天前
SAP-ABAP:MM 模块库存管理开发:出入库增强、批次管理与库存盘点功能开发
性能优化·sap·abap·增强·开发运维·经验交流·mm模块
goyeer12 天前
20.[SAP ABAP] DATA与TYPES异同
sap·abap·fico·fi·co·mm
爱喝水的鱼丶12 天前
SAP-ABAP:SAP MM 模块物料主数据批量导入与增强开发:字段扩展、校验逻辑与批量导入工具开发
开发语言·性能优化·sap·abap·增强·经验交流·mm
goyeer12 天前
21.[SAP ABAP] DATA关键字详解
sap·abap·fi·mm·opensql
ChampaignWolf16 天前
在 SAP S/4HANA 内部基于 ICF Handler 从零实现 ABAP MCP Server:架构、代码与踩坑实录
c++·架构·sap·abap·mcp
ChampaignWolf16 天前
YAAI 生态一周年:把 ABAP 变成 Agent 工具栈的开源组合拳
开源·abap·mcp·开源ai·yaai
爱喝水的鱼丶16 天前
SAP-ABAP:隐式/显式增强开发规范与避坑指南:10 类典型错误与运维方案
运维·性能优化·sap·abap·增强·经验交流