当前位置: 首页 > news >正文

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.dtcms.com/a/295171.html

相关文章:

  • MST技术加持,简化桌面多屏布局
  • 题解:P9468 [EGOI 2023] Candy / 糖果
  • GNSS差分定位系统之一:差分定位中的单差和双差
  • Java【代码 03】未分页数据根据参数进行后期分页(粘贴可用)
  • git 修改最近一次 commit 信息
  • Prometheus介绍
  • 部署zabbix
  • Git版本控制系统
  • 什么是MySQL 视图
  • CSS预处理器与后处理器对比解析
  • 我用EV-21569-SOM评估来开发ADSP-21569(十二)-SigmaStudio Plus做开发(3)
  • Element中ElMessageBox弹框内容及按钮样式自定义
  • 论文解析 基于遗传算法增强YOLOv5算法的合成数据风力涡轮叶片缺陷检测
  • 面试150 环形子数组的最大和
  • StringBuilder学习
  • Python 程序设计讲义(8):Python 的基本数据类型——浮点数
  • 【faiss】用于高效相似性搜索和聚类的C++库 | 源码详解与编译安装
  • C基础 07_综合案例《猜拳游戏》
  • 机器学习与视觉结合开发基础
  • IPTV电视直播源更新工具和检测直播源工具
  • Python打卡Day22 kaggle泰坦尼克号生存预测
  • 基于Informer+BiGRU-GAtt的并行预测模型
  • Java开发岗面试记录合集
  • 二分查找----3.在排序数组中查找元素的第一个和最后一个位置
  • 语音增强相关技术
  • 【世纪龙科技】新能源汽车维护与故障诊断-汽车专业数字课程资源
  • 第八讲:C++中的vector
  • Ⅹ—6.计算机二级综合题5---6套
  • Fast Frequency Estimation Algorithm by Least Squares Phase Unwrapping
  • OpenLayers 快速入门(三)Source 对象补充