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.
==================================
| 数例: | ||||
| 110 | ZFI_003 | SAP成本中心推送星瀚主数据平台 | http://172.16.17.220/ierp/kapi/v2/wwv2/base/bos_adminorg/bd_adminorg_save | |
| 110 | ZFI_028 | 成本中心推送主数据接口 | http://172.16.17.220/ierp/kapi/v2/wwv2/basedata/wwv2_bd_fi_profitcenter/bd_fi_profitcenter_save | |
| 110 | ZFI_028A | 公司代码映射 | http://172.16.17.220/ierp/kapi/v2/wwv2/basedata/wwv2_bd_company/bd_hr_company_query |
| ZTSC_TOKEN | 获取接口TOKEN存储表 | ||||||
| MANDT | MANDT | CLNT | 3 | 0 | 0 | 客户端 | |
| POSOBJ | ZE_OBJECT | CHAR | 50 | 0 | 0 | 对象值 | |
| TOKEN | STRING | 0 | 0 | 0 | token | ||
| 110 | SC | 2084196387246833664_74CFovIbX7QVBES18nXXsXfIBBNt3K8yz8ZDwmReL7lRaVxcNdNT4ORJ50nt15aEQB17kOSUQFXWAjK4y17bBqPTuqHgwRlENFzd00 | |||||
| 110 | SC1 | 2084196387246833664_ORuUKnPuM5Rt2Q54or0SvsN7YGueIWxvPOA8vUl8ykoRY4awNYJtCwuQh2dGXbhWls2qt8oza8H84IR4mW2PNGJQDRTXYl9KhKyr00 | |||||
| ZTSEND_URL | SAP推送数据接口地址维护表 | |||
| MANDT | MANDT | CLNT | 3 | |
| POSOBJ | ZE_OBJECT | CHAR | 50 | |
| OBJECT_T | ZE_OBJECT_T | CHAR | 50 | |
| URL | ZE_URL | CHAR | 257 | |
| USERNAME | USRTX | CHAR | 40 | |
| PASSWORD | CTE_PASSWORD | CHAR | 60 |
相关文章:
REST 方法
FUNCTION ZFM_INTERFACE_LOG. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(IV_DSTART) TYPE EDI_UPDDAT *"---------------------------------------…...
labelme json 标签转yolo txt【记录】
01 labelme json 转 txt(w_convert_labelme_to_yolo.py) #WT 将labelme json标签格式转换为YOLO txt格式 # 导入所需模块 import cv2 # OpenCV用于图像处理 import os # 操作系统路径管理 import json # JSON文件解析 import glob # 文件通配符搜索…...
Unity3D开发AI桌面精灵/宠物系列 【三】 语音识别 ASR 技术、语音转文本多平台 - 支持科大讯飞、百度等 C# 开发
Unity3D 交互式AI桌面宠物开发系列【三】ASR 语音识别 该系列主要介绍怎么制作AI桌面宠物的流程,我会从项目开始创建初期到最终可以和AI宠物进行交互为止,项目已经开发完成,我会仔细梳理一下流程,分步讲解。 这篇文章主要讲有关于…...
Qt -信号与槽
博客主页:【夜泉_ly】 本文专栏:【暂无】 欢迎点赞👍收藏⭐关注❤️ 目录 前言引入connect调用链模板类型的connectQObject::connectImplQObjectPrivate::connectImpl qobject_p_p.hconnect作用总结ai对信号与槽的模拟实现 前言 面向对象&am…...
深度解析新能源汽车研发测试中的关键信号采集技术
摘要 随着新能源汽车的快速发展,研发测试环节对信号采集的需求日益复杂。本文结合行业前沿技术方案,系统梳理了新能源汽车测试中需要关注的核心信号类型、采集方法及技术难点,涵盖高压电气、动力电池、热管理、智能驾驶、网络通信等全维度数据…...
Django中使用不同种类缓存的完整案例
Django中使用不同种类缓存的完整案例 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 Django中使用不同种类缓存的完整案例步骤1:设置Django项目步骤2:设置URL路由步骤3:视图级别…...
Linux 高级命令与常见操作:文本处理、系统管理与网络调试
下面是一份针对已经熟悉 Linux 基础命令的用户所整理的「高级命令与常见操作」笔记,涵盖文本处理、系统管理、网络调试与其他常用的进阶技巧。请你审核下面笔记,检查是否有过时的内容,如有请进行替换,确保其符合现代化需求&#x…...
解锁健康密码,拥抱品质生活
在生活节奏不断加快的今天,健康养生已成为人们关注的焦点。它不仅关乎当下生活质量,更是对未来幸福的投资。从日常生活的点滴出发,掌握正确养生方法,我们就能轻松收获健康。 饮食是健康的基石。我们应当遵循 “食物多样&#x…...
TLS 1.2 握手过程,每个阶段如何保证通信安全?
TLS 1.2 握手是确保客户端和服务器之间安全通信的关键过程。它涉及多个步骤,包括身份验证、加密算法协商和会话密钥交换。 目录 TLS 1.2 握手是确保客户端和服务器之间安全通信的关键过程。它涉及多个步骤,包括身份验证、加密算法协商和会话密钥交换。…...
ABAP 新语法 - corresponding
在 ABAP 中,CORRESPONDING 操作符用于根据字段名称自动映射结构体(Structure)或内表(Internal Table)的字段值。它比传统的 MOVE-CORRESPONDING 语句更灵活,支持更多控制选项。 基础用法 data: begin of …...
C++ 中为什么构造函数不需要实现虚函数,而析构函数需要?
在C中,构造函数不需要是虚函数,而析构函数往往需要,原因如下: 构造函数 对象创建顺序:构造函数的主要任务是初始化对象的成员变量,创建对象时需要先调用基类的构造函数,再调用派生类的构造函数…...
vscode使用方式
一、常用快捷键与代码操作 注释与代码排版 行注释:Ctrl /;块注释:Shift Alt A。 代码缩进:选中代码段后按 Tab(右移)或 Shift Tab(左移)。 代码导航与编辑 快速跳转文件&…...
存储模块cache
参考:存储模块 --- Cache_cache模块-CSDN博客 一级缓存(L1 Cache) 和 二级缓存(L2 Cache) 都是处理器内的高速缓存,用来减少访问主内存的延迟,提高处理器的性能。它们在计算机体系结构中发挥着…...
HTML零基础入门笔记:狂神版
前言 本笔记是学习狂神的java教程,建议配合视频,学习体验更佳。 【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 第1-2章:Java零基础入门笔记:(1-2)入门(简介、基础知识)-CSDN博客 第3章&…...
java.util.Collections中常用api
在Java中,java.util.Collections 是一个工具类,提供了大量静态方法用于操作或返回集合(如List、Set、Map等)。以下是常用的API分类整理: 1. 排序与顺序操作 sort(List<T> list) 对List进行自然顺序排序ÿ…...
FreeRTOS移植笔记:让操作系统在你的硬件上跑起来
一、为什么需要移植? FreeRTOS就像一套"操作系统积木",但不同硬件平台(如STM32、ESP32、AVR等)的CPU架构和外设差异大,需要针对目标硬件做适配配置。移植工作就是让FreeRTOS能正确管理你的硬件资源。 二、…...
c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第五式】动态内存管理
c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第五式】动态内存管理 【心法】 【第零章】c语言概述 【第一章】分支与循环语句 【第二章】函数 【第三章】数组 【第四章】操作符 【第五章】指针 【第六章】结构体 【第七章】const与c语言中一些错误代码 【禁忌秘术】 【第一式…...
树莓派超全系列教程文档--(22)使用外部存储设备的相关操作
使用外部存储设备的相关操作 外部存储设备相关操作安装存储设备设置自动挂载卸载存储设备处理 target is busy 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 外部存储设备相关操作 您可以将外部硬盘、SSD或U盘连接到Raspberry Pi上的任何USB端…...
MySQL表的增删改查基础版
这一部分内容比较多,请大家结合目录查看👀 增删改查 这一部分内容比较多,请大家结合目录查看👀 一、新增1.插入2.指定列插入3.一次插入多行记录 二、查询1.全列查询2.指定列查询3.查询字段为表达式4.别名5.去重6.多列去重7.排序8.…...
PDF预览-搜索并高亮文本
在PDF.js中实现搜索高亮功能可以通过自定义一些代码来实现。PDF.js 是一个通用的、基于Web的PDF阅读器,它允许你在网页上嵌入PDF文件,并提供基本的阅读功能。要实现搜索并高亮显示文本,你可以通过以下几个步骤来完成: 1. 引入PDF…...
【备赛】蓝桥杯嵌入式实现led闪烁
原理 由于蓝桥杯的板子带有锁存器,并且与lcd屏幕有冲突,所以这个就成了考点。 主要就是用定时器来实现,同时也要兼顾lcd的冲突。 一、处理LCD函数 首先来解决与lcd屏幕冲突的问题,把我们所有用到的lcd函数改装一下。 以下是基…...
【Python】贝叶斯,条件概率是怎么回事儿
【Python】贝叶斯,条件概率是怎么回事儿 一、原理简介1.1 贝叶斯定理1.2 朴素贝叶斯假设 二、算法实现过程2.1 数据准备与预处理2.2 模型训练与预测2.2.1 高斯朴素贝叶斯 - 对应连续型数据2.2.2 多项式朴素贝叶斯 - 离散型数据 2.3 模型评估 三、算法优缺点分析3.1 …...
Flink介绍——实时计算核心论文之Storm论文详解
引入 我们通过以下两篇文章,深入探索了S4是如何抽象流式计算模型,如何设计架构和系统,存在那些局限: 论文详解论文总结 Yahoo推出的S4 并没有在历史舞台上站稳脚跟,在S4的论文发表的同一年,我们今天的主…...
001 使用单片机实现的逻辑分析仪——吸收篇
本内容记录于韦东山老师的毕设级开源学习项目,含个人观点,请理性阅读。 个人笔记,没有套路,一步到位,欢迎交流! 00单片机的逻辑分析仪与商业版FPGA的逻辑分析仪异同 对比维度自制STM32逻辑分析仪商业版逻…...
es基本概念
Elasticsearch 的架构与基本概念 Elasticsearch(简称 ES)是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它被广泛用于全文搜索、日志分析、实时数据分析等场景。以下是其架构概述及其基本概念的详细解释。 Elasticsearch 的架…...
可以使用费曼学习法阅读重要的书籍
书本上画了很多线,回头看等于没画出任何重点。 不是所有的触动都是有效的。就像你曾经看过很多好文章,当时被触动得一塌糊涂,还把它们放进了收藏夹,但一段时间之后,你就再也记不起来了。如果让你在一本书上画出令自己…...
11-产品经理-创建产品
在“产品”-“仪表盘”内,可以查看系统中关于产品及相关需求的统计。 在“产品”-“产品列表”页面,可以按项目集、项目查看其关联产品。还可以添加产品、编辑产品线、或者导出产品列表。 产品看板,通过看板方式查看产品、产品计划和产品下的…...
JavaScript学习教程,从入门到精通,JavaScript 基础语法全面指南(5)
JavaScript 基础语法全面指南 一、JavaScript 基本概念 JavaScript 是一种轻量级的解释型或即时编译型的编程语言,主要用于网页开发,为网页添加交互功能。 1.1 JavaScript 的特点 解释型语言:不需要编译,由 JavaScript 引擎直…...
低代码开发平台:飞帆制作网页并集成到自己的网页中
应用场景: 有时,我们的网页使用了某个模版,或者自己写的 html、css、javascript 代码。只是网页中的一部分使用飞帆来制作。这样的混合网页如何实现呢? 其实很容易,来体验一下飞帆提供的功能! 还记得这个…...
语法: result=log (x);
LOG( ) 语法: resultlog (x); 参数: x是一个浮点数; 返回值: result等于返回值,是一个浮点数; 功能: 该函数是用来计算浮点数x的自然对数(即ln x);如果x小于或等于0,或x太大,则行为没有定义; 注意:存在error挂起; 如果在编写程序里包含了errno.h头文件,则范围和等级…...
