REST 方法

news2025/4/11 15:34:06

FUNCTION ZFM_INTERFACE_LOG.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IV_DSTART) TYPE  EDI_UPDDAT
*"----------------------------------------------------------------------

  TYPES: TY_TIME_COND TYPE RANGE OF TIMESTAMP.
  DATA: S_TS TYPE TY_TIME_COND.
*  DATA: S_TS TYPE RANGE OF TIMESTAMP.


  DATA START_TIMESTAMP TYPE TZONREF-TSTAMPS.
  DATA END_TIMESTAMP  TYPE TZONREF-TSTAMPS.

  CALL FUNCTION 'CIF_GEN4_CONVERT_DATETIME'
    EXPORTING
      IV_DATE      = IV_DSTART
      IV_TIME      = '000000'
      IV_TIMEZONE  = SY-ZONLO
    IMPORTING
      EV_TIMESTAMP = START_TIMESTAMP.

  CALL FUNCTION 'CIF_GEN4_CONVERT_DATETIME'
    EXPORTING
      IV_DATE      = IV_DSTART
      IV_TIME      = '235959'
      IV_TIMEZONE  = SY-ZONLO
    IMPORTING
      EV_TIMESTAMP = END_TIMESTAMP.


  S_TS = VALUE #( SIGN = 'I' OPTION = 'BT' ( LOW  = START_TIMESTAMP HIGH = END_TIMESTAMP ) ).


  DATA :BEGIN OF GS_ITEM,
          GUID        TYPE ZAFL_LOG-GUID,
          FNAME       TYPE ZAFL_LOG-FNAME,
          CUST_FIELD1 TYPE ZAFL_LOG-CUST_FIELD1,
          CUST_FIELD2 TYPE ZAFL_LOG-CUST_FIELD2,
          CUST_FIELD3 TYPE ZAFL_LOG-CUST_FIELD3,
          STATUS      TYPE ZAFL_LOG-STATUS,
          TIMESTAMP   TYPE ZAFL_LOG-TIMESTAMP,
          TIME_COST   TYPE ZAFL_LOG-TIME_COST,
          UNAME       TYPE ZAFL_LOG-UNAME,
          MESSAGE     TYPE ZAFL_LOG-MESSAGE,
          IMPORT      TYPE ZAFL_LOG-IMPORT,
          EXPORT      TYPE ZAFL_LOG-EXPORT,
          TABLE_IN    TYPE ZAFL_LOG-TABLE_IN,
          TABLE_OUT   TYPE ZAFL_LOG-TABLE_OUT,
          CHANGE_IN   TYPE ZAFL_LOG-CHANGE_IN,
          CHANGE_OUT  TYPE ZAFL_LOG-CHANGE_OUT,
          UDATE       TYPE ZTSD001M-UDATE,
          UTIME       TYPE ZTSD001M-UTIME,
        END OF GS_ITEM,
        GT_ITEM LIKE TABLE OF GS_ITEM.

  DATA: BEGIN OF GS_HEAD,
          apiName(20),
        END OF GS_HEAD.

  DATA: BEGIN OF GS_BODY,
          DATA LIKE TABLE OF GS_ITEM,
        END OF GS_BODY.

  DATA: BEGIN OF GS_SEND,
          HEAD LIKE GS_HEAD,
          BODY LIKE GS_BODY,
        END OF GS_SEND.

  TYPES: BEGIN OF T_RESP,
           ERR_CODE  TYPE STRING,
           ERR_MSG   TYPE STRING,
           TRACE_MSG TYPE STRING,
         END OF T_RESP.

  GS_SEND-HEAD-APINAME = 'SD100'.

  DATA:GS_RESP TYPE T_RESP.


  SELECT * FROM ZAFL_LOG WHERE TIMESTAMP   IN @S_TS INTO CORRESPONDING FIELDS OF TABLE @GT_ITEM.

  APPEND INITIAL LINE TO GT_ITEM.
  GS_SEND-BODY-DATA = GT_ITEM.

*  IF GT_ITEM IS NOT INITIAL.

  DATA:LT_FIELDS   TYPE TIHTTPNVP,
       LS_FIELDS   TYPE IHTTPNVP,
       LS_URL      TYPE ZTSEND_URL,
       LV_TYPE     TYPE BAPI_MTYPE,
       LV_SEND     TYPE STRING,
       LV_MESSAGE  TYPE STRING,
       LV_RESPONSE TYPE STRING.

  DATA:BEGIN OF LS_NAME_MAPPING,
         ABAP TYPE ABAP_COMPNAME,
         JSON TYPE STRING,
       END OF LS_NAME_MAPPING,
       LT_MAPPINGS LIKE HASHED TABLE OF LS_NAME_MAPPING WITH UNIQUE KEY ABAP.

  LT_MAPPINGS = VALUE #(
                 ( ABAP = 'GUID'             JSON = 'guid'         )
                 ( ABAP = 'FNAME'            JSON = 'fname'        )
                 ( ABAP = 'CUST_FIELD1'      JSON = 'cust_field1'  )
                 ( ABAP = 'CUST_FIELD2'      JSON = 'cust_field2'  )
                 ( ABAP = 'CUST_FIELD3'      JSON = 'cust_field3'  )
                 ( ABAP = 'STATUS'           JSON = 'status'       )
                 ( ABAP = 'TIMESTAMP'        JSON = 'timestamp'    )
                 ( ABAP = 'TIME_COST'        JSON = 'time_cost'    )
                 ( ABAP = 'UNAME'            JSON = 'uname'        )
                 ( ABAP = 'MESSAGE'          JSON = 'message'      )
                 ( ABAP = 'IMPORT'           JSON = 'import'       )
                 ( ABAP = 'EXPORT'           JSON = 'export'       )
                 ( ABAP = 'TABLE_IN'         JSON = 'table_in'     )
                 ( ABAP = 'TABLE_OUT'        JSON = 'table_out'    )
                 ( ABAP = 'CHANGE_IN'        JSON = 'change_in'    )
                 ( ABAP = 'CHANGE_OUT'       JSON = 'change_out'   )
                ).

  /UI2/CL_JSON=>SERIALIZE( EXPORTING DATA = GS_SEND   PRETTY_NAME = '' NAME_MAPPINGS = LT_MAPPINGS   RECEIVING  R_JSON = LV_SEND ).

  SELECT SINGLE * INTO @LS_URL            FROM ZTSEND_URL WHERE POSOBJ = 'ZSD_100'.
  SELECT SINGLE * INTO @DATA(LS_TOKEN)    FROM ZTSC_TOKEN WHERE POSOBJ = 'SC1'.
*
  LS_FIELDS-NAME = 'Content-Type'.
  LS_FIELDS-VALUE = 'application/json'.
  APPEND LS_FIELDS TO LT_FIELDS.
  CLEAR:LS_FIELDS.

  LS_FIELDS-NAME = 'accesstoken'.
  LS_FIELDS-VALUE = LS_TOKEN-TOKEN.
  APPEND LS_FIELDS TO LT_FIELDS.
  CLEAR:LS_FIELDS.
*
*
  CALL FUNCTION 'ZFM_RESTFUL_SEND'
    EXPORTING
      IV_URL           = LS_URL-URL
      IV_METHOD        = 'POST'
      IT_FIELDS        = LT_FIELDS
      IV_SEND_DATA     = LV_SEND
    IMPORTING
      EV_TYPE          = LV_TYPE
      EV_MESSAGE       = LV_MESSAGE
      EV_RESPONSE_DATA = LV_RESPONSE.

  /UI2/CL_JSON=>DESERIALIZE( EXPORTING JSON = LV_RESPONSE PRETTY_NAME = 'X' CHANGING DATA = GS_RESP ).

*    MESSAGE LV_MESSAGE TYPE LV_TYPE.

*  ENDIF.

*  ENDIF.


ENDFUNCTION.

=====================================

FUNCTION zfm_restful_send.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IV_URL) TYPE  ZE_URL OPTIONAL
*"     VALUE(IV_METHOD) TYPE  STRING DEFAULT 'POST'
*"     VALUE(IV_USERNAME) TYPE  STRING OPTIONAL
*"     VALUE(IV_PASSWORD) TYPE  STRING OPTIONAL
*"     VALUE(IT_FIELDS) TYPE  TIHTTPNVP OPTIONAL
*"     VALUE(IV_SEND_DATA) TYPE  STRING OPTIONAL
*"     VALUE(IV_PROXY_B) TYPE  CHAR1 OPTIONAL
*"     VALUE(IV_URL2) TYPE  STRING OPTIONAL
*"  EXPORTING
*"     VALUE(EV_TYPE) TYPE  BAPI_MTYPE
*"     VALUE(EV_MESSAGE) TYPE  STRING
*"     VALUE(EV_RESPONSE_DATA) TYPE  STRING
*"----------------------------------------------------------------------
  TYPES: BEGIN OF ty_response,
           code    TYPE char1,
           message TYPE string,
         END OF ty_response.
  DATA: ls_response TYPE ty_response.
  DATA:lv_url TYPE string.
  DATA:lo_http_client TYPE REF TO if_http_client,
       lv_code        TYPE i.
  DATA:lv_proxy_host TYPE string.
  DATA:lv_proxy_service TYPE string.
  DATA: lv_ssl_id TYPE ssfapplssl .
  IF iv_proxy_b IS NOT INITIAL.
    lv_proxy_host = 'proxy'.
    lv_proxy_service = '3128'.
  ENDIF.

  IF iv_url IS NOT INITIAL.
    lv_url = iv_url.
  ELSE.
    lv_url = iv_url2.
  ENDIF.


*创建客户端请求
  CALL METHOD cl_http_client=>create_by_url
    EXPORTING
      url                        = lv_url
      proxy_host                 = lv_proxy_host
      proxy_service              = lv_proxy_service
      ssl_id                     = lv_ssl_id
    IMPORTING
      client                     = lo_http_client
    EXCEPTIONS
      argument_not_found         = 1
      plugin_not_active          = 2
      internal_error             = 3
      pse_not_found              = 4
      pse_not_distrib            = 5
      pse_errors                 = 6
      oa2c_set_token_error       = 7
      oa2c_missing_authorization = 8
      oa2c_invalid_config        = 9
      oa2c_invalid_parameters    = 10
      oa2c_invalid_scope         = 11
      oa2c_invalid_grant         = 12
      OTHERS                     = 13.

  IF sy-subrc <> 0.
    ev_type = 'E'.
    lo_http_client->get_last_error( IMPORTING message = ev_message ).
    ev_message = '创建代理失败!' && ev_message.
    RETURN.
  ENDIF.

*不显示登录界面
  lo_http_client->propertytype_logon_popup = lo_http_client->co_disabled.

*设置账号+密码
  IF iv_username IS NOT INITIAL AND iv_password IS NOT INITIAL.
    lo_http_client->authenticate( EXPORTING username = iv_username password = iv_password ).
  ENDIF.

*设定调用服务
  lo_http_client->request->set_method( EXPORTING method = iv_method ).

*设置Headers
  lo_http_client->request->set_header_fields( EXPORTING fields = it_fields[] ).


*设置报文数据
  IF iv_send_data IS NOT INITIAL.
    CALL METHOD lo_http_client->request->set_cdata
      EXPORTING
        data   = iv_send_data
        offset = 0
        length = strlen( iv_send_data ).
  ENDIF.

*发送请求
  CALL METHOD lo_http_client->send
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2.
  IF sy-subrc <> 0.
    ev_type = 'E'.
    lo_http_client->get_last_error( IMPORTING message = ev_message ).
    ev_message = '发送请求失败!' && ev_message.
    RETURN.
  ENDIF.

*读取远程服务返回的处理过结果
  CALL METHOD lo_http_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3.

  IF sy-subrc <> 0 .
    ev_type = 'E'.
    lo_http_client->get_last_error( IMPORTING message = ev_message ).
    ev_message = '获取返回消息失败!' && ev_message.
    RETURN.
  ELSE.
    CALL METHOD lo_http_client->response->get_status
      IMPORTING
        code   = lv_code
        reason = ev_message.

    IF lv_code BETWEEN '200' AND '299'.
      ev_type = 'S'.
      ev_message = '调用接口成功!'.
    ELSE.
      ev_type = 'E'.
      ev_message = '返回码提示失败!' && ev_message.
    ENDIF.

*读取返回内容

    ev_response_data = lo_http_client->response->get_cdata( ).
    IF ev_response_data IS NOT INITIAL.
      REPLACE ALL OCCURRENCES OF '#' IN ev_response_data WITH space.
      CONDENSE ev_response_data NO-GAPS.
      ev_message = ev_message && ';' && ev_response_data.
    ENDIF.
  ENDIF.

  lo_http_client->close( ).

ENDFUNCTION.

==================================

数例:
110ZFI_003SAP成本中心推送星瀚主数据平台http://172.16.17.220/ierp/kapi/v2/wwv2/base/bos_adminorg/bd_adminorg_save
110ZFI_028成本中心推送主数据接口http://172.16.17.220/ierp/kapi/v2/wwv2/basedata/wwv2_bd_fi_profitcenter/bd_fi_profitcenter_save
110ZFI_028A公司代码映射http://172.16.17.220/ierp/kapi/v2/wwv2/basedata/wwv2_bd_company/bd_hr_company_query

ZTSC_TOKEN获取接口TOKEN存储表
MANDTMANDTCLNT300客户端 
POSOBJZE_OBJECTCHAR5000对象值 
TOKENSTRING000token
110SC2084196387246833664_74CFovIbX7QVBES18nXXsXfIBBNt3K8yz8ZDwmReL7lRaVxcNdNT4ORJ50nt15aEQB17kOSUQFXWAjK4y17bBqPTuqHgwRlENFzd00
110SC12084196387246833664_ORuUKnPuM5Rt2Q54or0SvsN7YGueIWxvPOA8vUl8ykoRY4awNYJtCwuQh2dGXbhWls2qt8oza8H84IR4mW2PNGJQDRTXYl9KhKyr00

ZTSEND_URLSAP推送数据接口地址维护表
MANDTMANDTCLNT3
POSOBJZE_OBJECTCHAR50
OBJECT_TZE_OBJECT_TCHAR50
URLZE_URLCHAR257
USERNAMEUSRTXCHAR40
PASSWORDCTE_PASSWORDCHAR

60

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity3D开发AI桌面精灵/宠物系列 【三】 语音识别 ASR 技术、语音转文本多平台 - 支持科大讯飞、百度等 C# 开发

Unity3D 交互式AI桌面宠物开发系列【三】ASR 语音识别 该系列主要介绍怎么制作AI桌面宠物的流程&#xff0c;我会从项目开始创建初期到最终可以和AI宠物进行交互为止&#xff0c;项目已经开发完成&#xff0c;我会仔细梳理一下流程&#xff0c;分步讲解。 这篇文章主要讲有关于…

Qt -信号与槽

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【暂无】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 目录 前言引入connect调用链模板类型的connectQObject::connectImplQObjectPrivate::connectImpl qobject_p_p.hconnect作用总结ai对信号与槽的模拟实现 前言 面向对象&am…

Django中使用不同种类缓存的完整案例

Django中使用不同种类缓存的完整案例 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 Django中使用不同种类缓存的完整案例步骤1:设置Django项目步骤2:设置URL路由步骤3:视图级别…

解锁健康密码,拥抱品质生活

在生活节奏不断加快的今天&#xff0c;健康养生已成为人们关注的焦点。它不仅关乎当下生活质量&#xff0c;更是对未来幸福的投资。从日常生活的点滴出发&#xff0c;掌握正确养生方法&#xff0c;我们就能轻松收获健康。​ 饮食是健康的基石。我们应当遵循 “食物多样&#x…

ABAP 新语法 - corresponding

在 ABAP 中&#xff0c;CORRESPONDING 操作符用于根据字段名称自动映射结构体&#xff08;Structure&#xff09;或内表&#xff08;Internal Table&#xff09;的字段值。它比传统的 MOVE-CORRESPONDING 语句更灵活&#xff0c;支持更多控制选项。 基础用法 data: begin of …

HTML零基础入门笔记:狂神版

前言 本笔记是学习狂神的java教程&#xff0c;建议配合视频&#xff0c;学习体验更佳。 【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 第1-2章&#xff1a;Java零基础入门笔记&#xff1a;(1-2)入门&#xff08;简介、基础知识&#xff09;-CSDN博客 第3章&…

FreeRTOS移植笔记:让操作系统在你的硬件上跑起来

一、为什么需要移植&#xff1f; FreeRTOS就像一套"操作系统积木"&#xff0c;但不同硬件平台&#xff08;如STM32、ESP32、AVR等&#xff09;的CPU架构和外设差异大&#xff0c;需要针对目标硬件做适配配置。移植工作就是让FreeRTOS能正确管理你的硬件资源。 二、…

c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第五式】动态内存管理

c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第五式】动态内存管理 【心法】 【第零章】c语言概述 【第一章】分支与循环语句 【第二章】函数 【第三章】数组 【第四章】操作符 【第五章】指针 【第六章】结构体 【第七章】const与c语言中一些错误代码 【禁忌秘术】 【第一式…

MySQL表的增删改查基础版

这一部分内容比较多&#xff0c;请大家结合目录查看&#x1f440; 增删改查 这一部分内容比较多&#xff0c;请大家结合目录查看&#x1f440; 一、新增1.插入2.指定列插入3.一次插入多行记录 二、查询1.全列查询2.指定列查询3.查询字段为表达式4.别名5.去重6.多列去重7.排序8.…

【备赛】蓝桥杯嵌入式实现led闪烁

原理 由于蓝桥杯的板子带有锁存器&#xff0c;并且与lcd屏幕有冲突&#xff0c;所以这个就成了考点。 主要就是用定时器来实现&#xff0c;同时也要兼顾lcd的冲突。 一、处理LCD函数 首先来解决与lcd屏幕冲突的问题&#xff0c;把我们所有用到的lcd函数改装一下。 以下是基…

【Python】贝叶斯,条件概率是怎么回事儿

【Python】贝叶斯&#xff0c;条件概率是怎么回事儿 一、原理简介1.1 贝叶斯定理1.2 朴素贝叶斯假设 二、算法实现过程2.1 数据准备与预处理2.2 模型训练与预测2.2.1 高斯朴素贝叶斯 - 对应连续型数据2.2.2 多项式朴素贝叶斯 - 离散型数据 2.3 模型评估 三、算法优缺点分析3.1 …

Flink介绍——实时计算核心论文之Storm论文详解

引入 我们通过以下两篇文章&#xff0c;深入探索了S4是如何抽象流式计算模型&#xff0c;如何设计架构和系统&#xff0c;存在那些局限&#xff1a; 论文详解论文总结 Yahoo推出的S4 并没有在历史舞台上站稳脚跟&#xff0c;在S4的论文发表的同一年&#xff0c;我们今天的主…

001 使用单片机实现的逻辑分析仪——吸收篇

本内容记录于韦东山老师的毕设级开源学习项目&#xff0c;含个人观点&#xff0c;请理性阅读。 个人笔记&#xff0c;没有套路&#xff0c;一步到位&#xff0c;欢迎交流&#xff01; 00单片机的逻辑分析仪与商业版FPGA的逻辑分析仪异同 对比维度自制STM32逻辑分析仪商业版逻…

11-产品经理-创建产品

在“产品”-“仪表盘”内&#xff0c;可以查看系统中关于产品及相关需求的统计。 在“产品”-“产品列表”页面&#xff0c;可以按项目集、项目查看其关联产品。还可以添加产品、编辑产品线、或者导出产品列表。 产品看板&#xff0c;通过看板方式查看产品、产品计划和产品下的…

低代码开发平台:飞帆制作网页并集成到自己的网页中

应用场景&#xff1a; 有时&#xff0c;我们的网页使用了某个模版&#xff0c;或者自己写的 html、css、javascript 代码。只是网页中的一部分使用飞帆来制作。这样的混合网页如何实现呢&#xff1f; 其实很容易&#xff0c;来体验一下飞帆提供的功能&#xff01; 还记得这个…

语法: result=log (x);

LOG( ) 语法: resultlog (x); 参数: x是一个浮点数; 返回值: result等于返回值,是一个浮点数; 功能: 该函数是用来计算浮点数x的自然对数(即ln x);如果x小于或等于0,或x太大,则行为没有定义; 注意:存在error挂起; 如果在编写程序里包含了errno.h头文件,则范围和等级…

Hibernate核心方法总结

Session中的核心方法梳理 1、save方法 这个方法表示将一个对象保存到数据库中&#xff0c;可以将一个不含OID的new出来的临时对象转换为一个处于Session缓存中具有OID的持久化对象。 需要注意的是&#xff1a;在save方法前设置OID是无效的但是也不会报错&#xff0c;在save方…

IntelliJ IDEA Maven 工具栏消失怎么办?

一、问题现象与背景 在使用 IntelliJ IDEA&#xff08;简称 IDEA&#xff09;开发 Maven 项目时&#xff0c;偶尔会遇到右侧或侧边栏的 Maven 工具栏&#xff08;显示依赖、生命周期等信息的窗口&#xff09;突然消失的情况。这可能影响开发者快速操作 Maven 构建、依赖管理等…

消息队列(kafka 与 rocketMQ)

为什么要使用消息队列?作用1: 削峰填谷(突发大请求量问题)作用2: 解耦(单一原则)作用3: 异步(减少处理时间) 如何选择消息队列(kafka&RocketMQ)成本功能性能选择 rocketMQ是参考kafka进行实现的为什么rocketMQ与kafka性能差距很大呢?kafka 的底层数据储存实现rocketMQ 的…

【STM32】Flash详解

【STM32】Flash详解 文章目录 【STM32】Flash详解1.Flash闪存概念1. 1核心区别&#xff1a;NOR Flash vs. NAND Flash1.2 为什么常说的“Flash”多指 NAND Flash&#xff1f;1.3技术细节对比(1) 存储单元结构(2) 应用场景(3) 可靠性要求 1.4总结 2.STM32内部的Flash2.1为什么是…