REST 方法

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.mzph.cn/diannao/76619.shtml

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

相关文章

QT 中的元对象系统(五):QMetaObject::invokeMethod的使用和实现原理

目录 1.简介 2.原理概述 3.实现分析 3.1.通过方法名调用方法的实现分析 3.2.通过可调用对象调用方法的实现分析 4.使用场景 5.总结 1.简介 QMetaObject::invokeMethod 是 Qt 框架中的一个静态方法&#xff0c;用于在运行时调用对象的成员函数。这个方法提供了一种动态调…

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

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

Java 状态模式 详解

状态模式详解 一、状态模式概述 状态模式(State Pattern)是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态改变时改变它的行为&#xff0c;使对象看起来似乎修改了它的类。 核心特点 状态封装&#xff1a;将每个状态的行为封装到独立的类中状态转换&#xff1a…

Nginx 配置 HTTPS 与 WSS 完整指南

Nginx 配置 HTTPS 与 WSS 完整指南 本教程将手把手教你如何为网站配置 HTTPS 加密访问&#xff0c;并通过反向代理实现安全的 WebSocket&#xff08;WSS&#xff09;通信。以 https://www.zhegepai.cn 域名为例&#xff0c;完整流程约需 30 分钟完成。 一、前置准备 1.1 域名…

双向链表的理解

背景 代码中经常会出现双向链表&#xff0c;对于双向链表的插入和删除有对应的API函数接口&#xff0c;但直观的图表更容易理解&#xff0c;所以本文会对rt-thread内核代码中提供的双向链表的一些API函数操作进行绘图&#xff0c;方便后续随时查看。 代码块 rt-thread中提供…

大文件上传源码,支持单个大文件与多个大文件

大文件上传源码&#xff0c;支持单个大文件与多个大文件 Ⅰ 思路Ⅱ 具体代码前端--单个大文件前端--多个大文件前端接口后端 Ⅰ 思路 具体思路请参考我之前的文章&#xff0c;这里分享的是上传流程与源码 https://blog.csdn.net/sugerfle/article/details/130829022 Ⅱ 具体代码…

Unity中的静态合批使用整理

静态批处理是一种绘制调用批处理方法&#xff0c;它组合不移动的网格以减少绘制调用。它将组合的网格转换为世界空间&#xff0c;并为它们构建一个共享顶点和索引缓冲区。然后&#xff0c;对于可见网格&#xff0c;Unity 会执行一系列简单的绘制调用&#xff0c;每个调用之间几…

【机器学习中的基本术语:特征、样本、训练集、测试集、监督/无监督学习】

机器学习基本术语详解 1. 特征&#xff08;Feature&#xff09; 定义&#xff1a;数据的属性或变量&#xff0c;用于描述样本的某个方面。作用&#xff1a;模型通过学习特征与目标之间的关系进行预测。示例&#xff1a; 预测房价时&#xff0c;特征可以是 面积、地段、房龄。…

C++学习之路:指针基础

目录 指针介绍与基本用法双重指针函数指针空指针与野指针函数参数的指针传递最后 指针一般在C/C语言学习的后期接触&#xff0c;这样就导致指针给新手一种高深莫测、难以掌握的刻板印象。但实际上指针的使用很简单&#xff0c;并且还能够极大的提高程序的灵活性&#xff0c;帮助…

【服务日志链路追踪】

MDCInheritableThreadLocal和spring cloud sleuth 在微服务架构中&#xff0c;日志链路追踪&#xff08;Logback Distributed Tracing&#xff09; 是一个关键需求&#xff0c;主要用于跟踪请求在不同服务间的调用链路&#xff0c;便于排查问题。常见的实现方案有两种&#x…

Kafka+Zookeeper从docker部署到spring boot使用完整教程

文章目录 一、Kafka1.Kafka核心介绍&#xff1a;​核心架构​核心特性​典型应用 2.Kafka对 ZooKeeper 的依赖&#xff1a;3.去 ZooKeeper 的演进之路&#xff1a;注&#xff1a;&#xff08;本文采用ZooKeeper3.8 Kafka2.8.1&#xff09; 二、Zookeeper1.核心架构与特性2.典型…

JUC系列JMM学习之随笔

JUC: JUC 是 Java 并发编程的核心工具包,全称为 Java Util Concurrent,是 java.util.concurrent 包及其子包的简称。它提供了一套强大且高效的并发编程工具,用于简化多线程开发并提高性能。 CPU核心数和线程数的关系:1核处理1线程(同一时间单次) CPU内核结构: 工作内…

The Rust Programming Language 学习 (九)

泛型 每一个编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是 泛型&#xff08;generics&#xff09;。泛型是具体类型或其他属性的抽象替代。我们可以表达泛型的属性&#xff0c;比如他们的行为或如何与其他泛型相关联&#xff0c;而不需要在编写和编译代码时知…

蓝桥杯 混乘数字

问题描述 混乘数字的定义如下&#xff1a; 对于一个正整数 n&#xff0c;如果存在正整数 a 和 b&#xff0c;使得&#xff1a; n a b且 a 与 b 的十进制数位中每个数字出现的次数之和&#xff0c;与 n 中对应数字出现的次数相同&#xff0c;则称 n 为混乘数字。 示例 对于…

CExercise04_1位运算符_2 定义一个函数判断给定的正整数是否为2的幂

题目&#xff1a; 给定一个正整数&#xff0c;请定义一个函数判断它是否为2的幂(1, 2, 4, 8, 16, …) 分析&#xff1a; &#xff1a; 代码 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdbool.h>/* 给定一个正整数&#xff0c;请定义一个函数…

SSL证书不可信的原因有哪些?(国科云)

SSL证书用于在客户端和服务器端之间建立一条加密通道&#xff0c;确保数据在传输过程中的安全性和完整性。然而&#xff0c;在实际应用中&#xff0c;我们有时会遇到SSL证书不可信的情况&#xff0c;严重影响了用户对网站的信任度。那么&#xff0c;SSL证书不可信的原因究竟有哪…

[王阳明代数讲义]琴语言类型系统工程特性

琴语言类型系统工程特性 层展物理学组织实务与艺术与琴生生.物机.械科.技工.业研究.所软凝聚态物理开发工具包社会科学气质砥砺学人生意气场社群成员魅力场与心气微积分社会关系力学 意气实体过程图论信息编码&#xff0c;如来码导引 注意力机制道装Transformer架构的发展标度律…

自抗扰ADRC之二阶线性扩展状态观测器(LESO)推导

1.龙伯格观测器 实际工程应用中&#xff0c;状态变量有时难以使用传感器直接测量&#xff0c;在这种情况下&#xff0c;使用状态观测器估计系统实际状态是非常常见的做法。最出名的状态观测器当属龙伯格博士在1971年发表于TAC的An Introduction to Observer[1]一文中提出的基于…

从头开发一个Flutter插件(二)高德地图定位插件

开发基于高德定位SDK的Flutter插件 在上一篇文章里具体介绍了Flutter插件的具体开发流程&#xff0c;从创建项目到发布。接下来将为Flutter天气项目开发一个基于高德定位SDK的Flutter定位插件。 申请key 首先进入高德地图定位SDK文档内下载定位SDK&#xff0c;并按要求申请A…

分布式锁之redis6

一、分布式锁介绍 之前我们都是使用本地锁&#xff08;synchronize、lock等&#xff09;来避免共享资源并发操作导致数据问题&#xff0c;这种是锁在当前进程内。 那么在集群部署下&#xff0c;对于多个节点&#xff0c;我们要使用分布式锁来避免共享资源并发操作导致数据问题…