SAP调用外部API

SAP需求将中文字符转化为对应的拼音

具体思路,由于sap中没有将中文字符转化为拼音的函数或方法类,则以http请求访问外部服务器发布的API服务,然后获取其返回值即可

1.调用外部网站上提供的api

缺点:免费次数有限,后需要充值

这里是用www格式的json报文

*&---------------------------------------------------------------------*
*& Report ZABAP081
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZABAP081.
DATA: LO_HTTP_CLIENT TYPE REF TO IF_HTTP_CLIENT,LV_URL         TYPE STRING VALUE 'https://eolink.o.apispace.com/zh-han2py/api/v1/forward/pinyin',LV_REQUEST     TYPE STRING,LV_HETERONYM   TYPE STRING.
DATA: IV_STYLE        TYPE C VALUE 5,IV_CHINESE_TEXT TYPE STRING VALUE '中文',IV_HETERONYM    TYPE STRING VALUE  'False',EV_PINYIN       TYPE STRING,EV_STATUS_CODE  TYPE INT2,EV_RESPONSE     TYPE STRING,MV_API_TOKEN    TYPE STRING VALUE 'dtaao2z0ve7nwr1myq8b4piq8bf91q51',lv_encoded TYPE string." 设置多音字参数
LV_HETERONYM = COND #( WHEN IV_HETERONYM = ABAP_TRUE THEN 'True' ELSE 'False' ).*lv_encoded = cl_http_utility=>escape_url( IV_CHINESE_TEXT )." 创建HTTP客户端
CL_HTTP_CLIENT=>CREATE_BY_URL(EXPORTINGURL                = LV_URLIMPORTINGCLIENT             = LO_HTTP_CLIENTEXCEPTIONSARGUMENT_NOT_FOUND = 1PLUGIN_NOT_ACTIVE  = 2INTERNAL_ERROR     = 3OTHERS             = 4 ).IF SY-SUBRC <> 0.EV_STATUS_CODE = 500.EV_RESPONSE = 'HTTP客户端创建失败'.RETURN.
ENDIF." 设置请求头
LO_HTTP_CLIENT->REQUEST->SET_METHOD( 'POST' ).
LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD(NAME  = 'X-APISpace-Token'VALUE = MV_API_TOKEN ).
LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD(NAME  = 'Content-Type'VALUE = 'application/x-www-form-urlencoded' )." 构建请求体
CONCATENATE 'text=' IV_CHINESE_TEXTINTO LV_REQUEST." 设置请求体
LO_HTTP_CLIENT->REQUEST->SET_CDATA( LV_REQUEST )." 发送请求
LO_HTTP_CLIENT->SEND(EXCEPTIONSHTTP_COMMUNICATION_FAILURE = 1HTTP_INVALID_STATE         = 2HTTP_PROCESSING_FAILED     = 3HTTP_INVALID_TIMEOUT       = 4OTHERS                     = 5 ).IF SY-SUBRC <> 0.EV_STATUS_CODE = 500.EV_RESPONSE = '请求发送失败'.RETURN.
ENDIF." 接收响应
LO_HTTP_CLIENT->RECEIVE(EXCEPTIONSHTTP_COMMUNICATION_FAILURE = 1HTTP_INVALID_STATE         = 2HTTP_PROCESSING_FAILED     = 3OTHERS                     = 4 ).IF SY-SUBRC <> 0.EV_STATUS_CODE = 500.EV_RESPONSE = '响应接收失败'.RETURN.
ENDIF." 获取响应状态和内容
*EV_STATUS_CODE = LO_HTTP_CLIENT->RESPONSE->GET_CONTENT_TYPE( ).
EV_RESPONSE = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( )." 关闭连接
LO_HTTP_CLIENT->CLOSE( )." 解析响应
*IF EV_STATUS_CODE = 200." 假设API返回JSON格式: {"code":0,"data":{"pinyin":"..."}}IF EV_RESPONSE IS NOT INITIAL.DATA: LV_JSON TYPE STRING,LS_DATA TYPE /UI2/CL_JSON=>JSON.LV_JSON = EV_RESPONSE./UI2/CL_JSON=>DESERIALIZE(EXPORTINGJSON = LV_JSONCHANGINGDATA = LS_DATA ).
ENDIF.
*  IF LS_DATA-DATA IS NOT INITIAL.
*    EV_PINYIN = LS_DATA-DATA-PINYIN.
*  ELSE.
*    EV_PINYIN = ''.
*  ENDIF.
*ENDIF.

2.使用java或python内部自开发相应的逻辑,然后生成api,放到对应的内部服务器上

要求需要自行写相关逻辑,并需要部署到内部服务器上,但是可定制性大大增加

这里相关服务不方便展示

代码如下

*&---------------------------------------------------------------------*
*& Report ZABAP082
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZABAP082.DATA: LO_HTTP_CLIENT TYPE REF TO IF_HTTP_CLIENT,LV_URL         TYPE STRING VALUE 'http://xxxxxxxxxxxxxxxxx/convert',LV_REQUEST     TYPE STRING,LV_REQUEST1     TYPE STRING,LV_HETERONYM   TYPE STRING VALUE 'false'.
DATA: IV_STYLE        TYPE STRING VALUE 'normal',IV_CHINESE_TEXT TYPE STRING VALUE '搜索',IV_HETERONYM    TYPE ABAP_BOOL VALUE  abap_false,EV_PINYIN       TYPE STRING,EV_STATUS_CODE  TYPE INT2,EV_RESPONSE     TYPE STRING.TYPES: BEGIN OF ty_pinyin_request,text      TYPE string,
*         style     TYPE string,
*         heteronym TYPE abap_bool,
*         heteronym TYPE STRING,END OF ty_pinyin_request.DATA:       lv_encoded TYPE string,ls_request TYPE ty_pinyin_request,
*    ls_request TYPE string,lv_json    TYPE string." 创建HTTP客户端
CL_HTTP_CLIENT=>CREATE_BY_URL(EXPORTINGURL                = LV_URLIMPORTINGCLIENT             = LO_HTTP_CLIENTEXCEPTIONSARGUMENT_NOT_FOUND = 1PLUGIN_NOT_ACTIVE  = 2INTERNAL_ERROR     = 3OTHERS             = 4 ).IF SY-SUBRC <> 0.EV_STATUS_CODE = 500.EV_RESPONSE = 'HTTP客户端创建失败'.RETURN.
ENDIF." 设置请求头LO_HTTP_CLIENT->REQUEST->SET_METHOD( 'POST' ).*LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD(
*  NAME  = 'accept'
*  VALUE = 'application/json' ).LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD(NAME  = 'Content-Type'VALUE = 'application/json' ).ls_request-text = IV_CHINESE_TEXT.lv_json = /ui2/cl_json=>serialize(data             = ls_requestcompress         = abap_false  " 不压缩输出pretty_name      = /ui2/cl_json=>pretty_mode-low_case  " 保持字段名小写
).IF sy-subrc = 0.LV_REQUEST = lv_json.ENDIF." 设置请求体
LO_HTTP_CLIENT->REQUEST->SET_CDATA( LV_REQUEST )." 发送请求
LO_HTTP_CLIENT->SEND(EXCEPTIONSHTTP_COMMUNICATION_FAILURE = 1HTTP_INVALID_STATE         = 2HTTP_PROCESSING_FAILED     = 3HTTP_INVALID_TIMEOUT       = 4OTHERS                     = 5 ).IF SY-SUBRC <> 0.EV_STATUS_CODE = 500.EV_RESPONSE = '请求发送失败'.RETURN.
ENDIF." 接收响应
LO_HTTP_CLIENT->RECEIVE(EXCEPTIONSHTTP_COMMUNICATION_FAILURE = 1HTTP_INVALID_STATE         = 2HTTP_PROCESSING_FAILED     = 3OTHERS                     = 4 ).IF SY-SUBRC <> 0.EV_STATUS_CODE = 500.EV_RESPONSE = '响应接收失败'.RETURN.
ENDIF." 获取响应状态和内容
*EV_STATUS_CODE = LO_HTTP_CLIENT->RESPONSE->GET_CONTENT_TYPE( ).
EV_RESPONSE = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ).
write EV_RESPONSE.

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

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

相关文章

(12)机器学习小白入门YOLOv:YOLOv8-cls 模型微调实操

YOLOv8-cls 模型微调实操 (1)机器学习小白入门YOLOv &#xff1a;从概念到实践 (2)机器学习小白入门 YOLOv&#xff1a;从模块优化到工程部署 (3)机器学习小白入门 YOLOv&#xff1a; 解锁图片分类新技能 (4)机器学习小白入门YOLOv &#xff1a;图片标注实操手册 (5)机器学习小…

基于Matlab传统图像处理技术的车辆车型识别与分类方法研究

随着计算机视觉和图像处理技术的发展&#xff0c;车辆检测与识别已经成为智能交通系统中的一个重要研究方向。传统图像处理方法通过对图像进行预处理、特征提取、分类与识别&#xff0c;提供了一种无需复杂深度学习模型的解决方案。本研究基于MATLAB平台&#xff0c;采用传统图…

未来趋势:LeafletJS 与 Web3/AI 的融合

引言 LeafletJS 作为一个轻量、灵活的 JavaScript 地图库&#xff0c;以其模块化设计和高效渲染能力在 Web 地图开发中占据重要地位。随着 Web3 和人工智能&#xff08;AI&#xff09;的兴起&#xff0c;地图应用的开发范式正在发生变革。Web3 技术&#xff08;如区块链、去中…

Spring AI 系列之二十一 - EmbeddingModel

之前做个几个大模型的应用&#xff0c;都是使用Python语言&#xff0c;后来有一个项目使用了Java&#xff0c;并使用了Spring AI框架。随着Spring AI不断地完善&#xff0c;最近它发布了1.0正式版&#xff0c;意味着它已经能很好的作为企业级生产环境的使用。对于Java开发者来说…

LFU算法及优化

继上一篇的LRU算法的实现和讲解&#xff0c;这一篇来讲述LFU最近使用频率高的数据很大概率将会再次被使用,而最近使用频率低的数据,将来大概率不会再使用。做法&#xff1a;把使用频率最小的数据置换出去。这种算法更多是从使用频率的角度&#xff08;但是当缓存满时&#xff0…

关于原车一键启动升级手机控车的核心信息及注意事项

想知道如何给原车已经有一键启动功能的车辆加装手机远程启动。这是个很实用的汽车改装需求&#xff0c;尤其适合想在冬天提前热车、夏天提前开空调的车主。一、适配方案与核心功能 ‌升级专车专用4G手机控车模块‌&#xff0c;推荐安装「移动管家YD361-3」系统&#xff0c;该方…

数据结构与算法:类C语言有关操作补充

数据结构与算法:类C语言操作补充 作为老师,我将详细讲解类C语言(如C或C++)中的关键操作,包括动态内存分配和参数传递。这些内容在数据结构与算法中至关重要,例如在实现动态数组、链表或高效函数调用时。我会用通俗易懂的语言和代码示例逐步解释,确保你轻松掌握。内容基…

Go 并发(协程,通道,锁,协程控制)

一.协程&#xff08;Goroutine&#xff09;并发&#xff1a;指程序能够同时执行多个任务的能力&#xff0c;多线程程序在一个核的cpu上运行&#xff0c;就是并发。并行&#xff1a;多线程程序在多个核的cpu上运行&#xff0c;就是并行。并发主要由切换时间片来实现"同时&q…

图机器学习(15)——链接预测在社交网络分析中的应用

图机器学习&#xff08;15&#xff09;——链接预测在社交网络分析中的应用0. 链接预测1. 数据处理2. 基于 node2vec 的链路预测3. 基于 GraphSAGE 的链接预测3.1 无特征方法3.2 引入节点特征4. 用于链接预测的手工特征5. 结果对比0. 链接预测 如今&#xff0c;社交媒体已成为…

每日一算:华为-批萨分配问题

题目描述"吃货"和"馋嘴"两人到披萨店点了一份铁盘&#xff08;圆形&#xff09;披萨&#xff0c;并嘱咐店员将披萨按放射状切成大小相同的偶数个小块。但是粗心的服务员将披萨切成了每块大小都完全不同的奇数块&#xff0c;且肉眼能分辨出大小。由于两人都…

Transfusion,Show-o and Show-o2论文解读

目录 一、Transfusion 1、概述 2、方法 二、Show-o 1、概述 2、方法 3、训练 三、Show-o2 1、概述 2、模型架构 3、训练方法 4、实验 一、Transfusion 1、概述 Transfusion模型应该是Show系列&#xff0c;Emu系列的前传&#xff0c;首次将文本和图像生成统一到单…

聊聊 Flutter 在 iOS 真机 Debug 运行出现 Timed out *** to update 的问题

最近刚好有人在问&#xff0c;他的 Flutter 项目在升级之后出现 Error starting debug session in Xcode: Timed out waiting for CONFIGURATION_BUILD_DIR to update 问题&#xff0c;也就是真机 Debug 时始终运行不了的问题&#xff1a; 其实这已经是一个老问题了&#xff0c…

《R for Data Science (2e)》免费中文翻译 (第1章) --- Data visualization(2)

写在前面 本系列推文为《R for Data Science (2)》的中文翻译版本。所有内容都通过开源免费的方式上传至Github&#xff0c;欢迎大家参与贡献&#xff0c;详细信息见&#xff1a; Books-zh-cn 项目介绍&#xff1a; Books-zh-cn&#xff1a;开源免费的中文书籍社区 r4ds-zh-cn …

【机器学习【9】】评估算法:数据集划分与算法泛化能力评估

文章目录一、 数据集划分&#xff1a;训练集与评估集二、 K 折交叉验证&#xff1a;提升评估可靠性1. 基本原理1.1. K折交叉验证基本原理1.2. 逻辑回归算法与L22. 基于K折交叉验证L2算法三、弃一交叉验证&#xff08;Leave-One-Out&#xff09;1、基本原理2、代码实现四、Shuff…

CodeBuddy三大利器:Craft智能体、MCP协议和DeepSeek V3,编程效率提升的秘诀:我的CodeBuddy升级体验之旅(个性化推荐微服务系统)

&#x1f31f; 嗨&#xff0c;我是Lethehong&#xff01;&#x1f31f; &#x1f30d; 立志在坚不欲说&#xff0c;成功在久不在速&#x1f30d; &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞⬆️留言收藏&#x1f680; &#x1f340;欢迎使用&#xff1a;小智初学计…

Spring Boot 整合 Redis 实现发布/订阅(含ACK机制 - 事件驱动方案)

Spring Boot整合Redis实现发布/订阅&#xff08;含ACK机制&#xff09;全流程一、整体架构二、实现步骤步骤1&#xff1a;添加Maven依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter…

Sklearn 机器学习 线性回归

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Sklearn 机器学习线性回归实战详解 线性回归是机器学习中最基础也最经典的算法之一,…

AJAX案例合集

案例一&#xff1a;更换网站背景JS核心代码<script>document.querySelector(.bg-ipt).addEventListener(change, e > {//选择图片上传&#xff0c;设置body背景const fd new FormData()fd.append(img, e.target.files[0])axios({url: http://hmajax.itheima.net/api/…

vscode环境下c++的常用快捷键和插件

本文提供一些能够在vscode的环境下&#xff0c;提高c代码书写效率的快捷键&#xff0c;插件以及设置等等。 快捷键ctrlshiftx&#xff1a; 弹出插件菜单ctrlshiftp&#xff1a;弹出命令面板可以快捷执行一些常见命令插件安装这个后&#xff0c;可以按住ctrl跳转到方法的实现&am…

React + ts 中应用 Web Work 中集成 WebSocket

一、Web Work定义useEffect(() > {let webSocketIndex -1const websocketWorker new Worker(new URL(./websocketWorker.worker.ts?worker, import.meta.url),{type: module // 必须声明模块类型});//初始化WEBSOCKET&#xff08;多个服务器选择最快建立连接…