添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

3、在 IF_HTTP_EXTENSION~HANDLE_REQUEST 方法中编写代码: (注:文末附另一种写法)

   METHOD if_http_extension~handle_request.
     DATA: BEGIN OF ls_data,
             matnr TYPE matnr,
             maktx TYPE maktx,
           END OF ls_data.
     DATA: lt_data LIKE TABLE OF ls_data.
     DATA: lt_fields TYPE tihttpnvp.
     FIELD-SYMBOLS: <fs_field> LIKE LINE OF lt_fields.
     DATA: lv_method TYPE string. "获取GET/POST方式
     DATA: lv_json  TYPE string,  "返回参数
           lv_json1 TYPE string,  "获取传回值数据
           lv_json2 TYPE string.  "获取传回值数据
*    获取JSON抬头数据
     server->request->get_header_fields(
         CHANGING
           fields = lt_fields
     lv_method = server->request->get_header_field( name = '~request_method' )."获取GET/POST方式
     CALL METHOD server->response->if_http_entity~set_content_type
       EXPORTING
         content_type = 'application/json'.
     CASE lv_method.
       WHEN 'GET'.
*        获取数据
         SELECT matnr maktx INTO CORRESPONDING FIELDS OF TABLE lt_data
           FROM makt
           UP TO 20 ROWS.
*        内表转换JSON
         CALL METHOD /ui2/cl_json=>serialize
           EXPORTING
             data   = lt_data
           RECEIVING
             r_json = lv_json.
*        将行数据JSON返回给调用端
         server->response->set_cdata(
           EXPORTING
             data   = lv_json
         server->response->set_status( code = 200 reason = 'OK' ).
       WHEN 'POST'.
*        获取JSON行数据
         lv_json1 = server->request->if_http_entity~get_cdata( ).
*        解析json至内表方法1
         /ui2/cl_json=>deserialize( EXPORTING json = lv_json1
                                     CHANGING data = ls_data ).
         IF NOT lv_json1 IS INITIAL.
*          获取数据
           SELECT matnr maktx INTO CORRESPONDING FIELDS OF TABLE lt_data
             FROM makt
             UP TO 20 ROWS
             where matnr = ls_data-matnr.
*         内表转换json
           CALL METHOD /ui2/cl_json=>serialize
             EXPORTING
               data   = lt_data
             RECEIVING
               r_json = lv_json.
*        将行数据JSON返回给调用端
           server->response->set_cdata(
             EXPORTING
               data   = lv_json
         ENDIF.
         LOOP AT lt_fields INTO DATA(ls_fields).
           CASE ls_fields-name.
             WHEN 'lt_data'.
               lv_json2 = ls_fields-value.
           ENDCASE.
         ENDLOOP.
*        解析json至内表方法1
         /ui2/cl_json=>deserialize( EXPORTING json = lv_json2
                                     CHANGING data = lt_data ).
         IF NOT lv_json2 IS INITIAL.
*        将行数据JSON返回给调用端
           server->response->set_cdata(
             EXPORTING
               data   = 'SoapUi传参已收到'
         ENDIF.
         server->response->set_status( code = 200 reason = 'OK' ).
     ENDCASE.
   ENDMETHOD.

二、使用事务码 SICF default_host/sap/bc 节点下面创建子节点,用 Z_HCX_HTTP 类并激活方法:

1、创建子元素:

文末附:上文步骤3提到的另一种写法。

1、手动再依次添加GET和POST方法,再依次选中,点击参数,添加 参数SERVER - 类型Importing - 键入方法Type Ref To - 关联类型IF_HTTP_SERVER

2、双击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.

3、根据业务需求情况,选择GET或POST编写代码,以GET为例:

  method GET.
    TYPES:BEGIN OF TY_TAB,
      AUFNR TYPE AFPO-AUFNR, "生产订单号
*      WERKS TYPE MARC-WERKS, "工厂
*      MATNR TYPE AFPO-MATNR, "物料号
    END OF TY_TAB.
    DATA:GT_TAB TYPE TABLE OF TY_TAB,
         GS_TAB TYPE TY_TAB.
    TYPES:BEGIN OF TY_OUT,
      MATNR TYPE AFPO-MATNR, "物料号
      LGORT TYPE AFPO-LGORT, "库存地点
      PSMNG TYPE AFPO-PSMNG, "总数量
    END OF TY_OUT.
    DATA:GT_OUT TYPE TABLE OF TY_OUT,
         GS_OUT TYPE TY_OUT.
    DATA:
      BEGIN OF LS_REQUEST,
        ACTION TYPE STRING,           " 可以用来区分具体对应的处理类
        DATA   TYPE TABLE OF TY_TAB, " 表结构
      END OF LS_REQUEST,
      LV_JSON         TYPE STRING,
      LV_CONTENT_TYPE TYPE STRING,
      LV_JSON_OUT     TYPE STRING,
      LT_RETURN TYPE STANDARD TABLE OF BAPIRETURN,
      LS_RETURN TYPE BAPIRETURN.
    " DELIVERS THE HTTP BODY OF THIS ENTITY AS CHARACTER DATA
    LV_JSON  = SERVER->REQUEST->GET_CDATA( ).
    IF LV_JSON IS INITIAL.
      SERVER->RESPONSE->SET_STATUS( CODE = 404 REASON = '未解析到BODY参数,请检查' ).
      RETURN.
    ENDIF.
    " 将JSON转换成内表
    /UI2/CL_JSON=>DESERIALIZE( EXPORTING JSON = LV_JSON CHANGING DATA = LS_REQUEST ).
    CASE LS_REQUEST-ACTION.
      WHEN 'ZGETPRINT'.
      WHEN OTHERS.
        SERVER->RESPONSE->SET_STATUS( CODE = 404 REASON = '未解析到对应ACTION,请检查' ).
        RETURN.
    ENDCASE.
    IF LS_REQUEST-DATA IS NOT INITIAL.
      GT_TAB = LS_REQUEST-DATA.
    ENDIF.
    LOOP AT GT_TAB INTO GS_TAB.
      "补全生产订单号的前导0.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = GS_TAB-AUFNR
        IMPORTING
          OUTPUT = GS_TAB-AUFNR.
      MODIFY GT_TAB FROM GS_TAB.
    ENDLOOP.
*   获取打印数据
    SELECT MATNR LGORT PSMNG INTO CORRESPONDING FIELDS OF TABLE GT_OUT
      FROM AFPO FOR ALL ENTRIES IN GT_TAB
        WHERE AUFNR = GT_TAB-AUFNR.
    IF GT_OUT IS INITIAL.
      SERVER->RESPONSE->SET_CDATA( /UI2/CL_JSON=>SERIALIZE( DATA = 'CODE:500, SAP API SELECT ERROR' ) ).
       RETURN.
    ENDIF.
    LOOP AT GT_OUT INTO GS_OUT.
      "去除物料号的前导0.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          INPUT  = GS_OUT-MATNR
        IMPORTING
          OUTPUT = GS_OUT-MATNR.
      MODIFY GT_OUT FROM GS_OUT.
    ENDLOOP.
*    内表转换JSON
    CALL METHOD /UI2/CL_JSON=>SERIALIZE
      EXPORTING
        DATA   = GT_OUT
      RECEIVING
        R_JSON = LV_JSON_OUT.
*   将行数据JSON返回给调用端
    SERVER->RESPONSE->SET_CDATA(
      EXPORTING
        DATA   = LV_JSON_OUT ).
  endmethod.

4、请求示例

"ACTION" : "ZGETPRINT" ,

"DATA" : [

"AUFNR" : "1000003"

5、响应示例 ​​​

A [{"MATNR":"11000042","LGORT":"4071","PSMNG":1620.000}]

B "CODE:500, SAP API SELECT ERROR" 注:未获取到数据

资源名称: sap abap 开发从入门到精通 内容简介: 《 SAP ABAP 开发从入门到精通》以应用实例的形式,讲解了 SAP ABAP 开发的相关知识点,详细介绍了 SAP ABAP 开发者必须掌握的包与变更传输系统(CTS)、数据类型、数据库、模块化程序、内表、调试、 ABAP 数据字典、锁对象、检索帮助、FieldSymbol与数据引用、 SAP 内存与 ABAP 内存、报表程序、模块池程序、 ABAP 对象、面向对象A 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
ABAP Netweaver里的事务码 SICF 是Jerry做原型开发时非常喜欢 使用 的一个工具:但凡遇到需要把 ABAP 系统里的资源以服务的方式暴露出来的场景,Jerry都喜欢在 SICF 里创建一个服务节点然后把业务逻辑写进去。 采用 SICF 服务的方式暴露 ABAP Netweaver上的资源,比选择OData或者Web Service的工作量要小很多,比较适合Jerry负责的一些开发周期短,需要迅速出...
原因分析:出现此问题原因是浏览器找不到要访问的地址, 找不到要访问的地址,有可能是服务器本身故障了或者网络链接的问题,但如果网络和服务器都正常的话,更大的可能是WEB服务器没有进行被DNS解析到。   解决办法:让服务器的host被DNS解析。查看服务器的hostname很简单,只. FUNCTION ZOFSFM001. *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" REFERENCE(IS_HEAD) TYPE ZOFSS001 *" E.
In my opinion ABAP ICF handler and Java Servlet play the same role in enhancement which enables your web server with additional functionality. This blog will not introduce how an ICF handler class in ...
Sap API 该程序正在读取 SAP API 。 此 API 从防火墙后面的 SAP ECC系统公开ODATA。 需要一个天蓝色的AD帐户,一个 SAP -id,包括访问 SAP 系统中技术角色的权限。 SAP API 已在Azure API 管理中注册。
1 修改下载FM时,文件夹 screens 和 dictionary 放在对应的FM里. 2 修复 FM里关联FM下载时,include 下载不全的问题. 3 修复在下载 从表生成的SM30维护视图FG时,include 下载不全的问题. 4 FM下载时,主程序文件名改为大写,此处只修改了下载到PC时的逻辑. 5 修改根据FG下载时,同一FG下的FM都放在同一FG的文件夹下. 5.1 在屏幕FG处增加控制选项check box[ Remove FM's floder in FG: ],当勾选后, 5.1.1 下载前删除重复的include文件 5.1.2 该FG下所有FM & include都放在FG根目录下,不再每个FM各建一个文件夹. 5.1.3 该FG只生成一个 global-fg_[fg-name].html文件.对应FM中的超链接 'Global
一些刚刚接触到 SAP Webservice的开发者由于对 SAP Netweaver组件的不熟悉,往往在 使用 事物码SOAMANAGER进行webservice配置的时候,发现无法正常启动SOAMANAGER,本文将对两种常见的报错进行分析和处理,希望对大家有所帮助。 1.“无法访问此页面”:错误代码INET_E_RESOURCE_NOT_FOUND   原因分析:出现此问题...
DATA: lo_ http _client TYPE REF TO if_ http _client, lv_service TYPE string, lv_result TYPE string, lo_ixml TYPE REF TO if_ixml, lo_streamfactory TYPE...
SAP ABAP 中,我们可以 使用 一些技术来查看程序的内存 使用 情况。以下是一些常用的方法: 1. 使用 Memory Inspector工具:可以通过事务码`SP01`进入Memory Inspector工具。在该工具中,可以查看程序在执行过程中所 使用 的内存量,并能够监视内存泄漏情况。通过选择相应的对象和进程,可以获得更详细的内存 使用 情况。 2. 使用 ABAP Runtime Analysis (SE30):通过事务码`SE30`进入 ABAP Runtime Analysis工具。在该工具中,可以分析程序的执行时间、内存占用以及数据库访问情况等。通过选择相应的程序和用户,可以查看内存 使用 情况以及相关的统计信息。 3. 使用 ABAP Memory Inspector (SAT):通过事务码`SAT`进入 ABAP Memory Inspector工具。在该工具中,可以查看程序中已分配的内存块的大小和类型。可以选择相应的程序和层次结构,以获得更详细的内存 使用 情况。 4. 使用 工具代码:可以通过编写 ABAP 代码,并 使用 相应的函数模块来查看程序的内存 使用 情况。例如, 使用 `GET_MEMORY_USAGE`函数模块可以获取当前进程的内存 使用 情况。还可以 使用 `GET_GLOBAL_MEMORY_STATISTICS`函数模块来获取整个系统的内存统计信息。 通过 使用 上述方法,我们可以有效地监视和分析程序的内存 使用 情况,以便及时优化和调整程序,提高系统的性能和稳定性。