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

ABAP小白开发操作手册+(九)ABAP调用http

开发类型:

新增ABAP通过调用http的方式来发送业务数据到其他系统

开发申请:

(这里业务的开发申请没写完整SAP对应外部系统字段的对应关系,没关系,我们可以看接口文档)

外围系统提供的接口文档:

(这一part的参数有点长,大家看看得了,不用太在意,把这个外围系统提供的参数列出来,只是为了体现参数的一些结构,方便大家对比后面我们在开发过程中,如何进行SAP参数的设置)

接口地址:

测试机: http://123456/rdmCalled/forSap/poInfo

正式机: http://123456/rdmCalled/forSap/poInfo

请求方式:

POST

入参类型:

["aplication/json"]

响应类型:

["application/json"]

请求参数:

入参示例:

{

        "detailInfoList": [

                 {

                         "count": 2,

                         "materialNo": "m001",

                        "materialName": "物料001",

                         "rowNo": "1",

                         "status": 1,

                         "taxRate": 0,

                         "totalPrice": 10,

                         "unitPrice": 5

                 }

        ],

        "orderDate": "2024-04-28 00:00:00",

        "poNo": "po001",

        "prNo": "pr001",

        "projectCode": "HKC20230524001"

}

响应状态:

状态码

说明

200

成功

500

异常

503

服务不正常

403

无权限

401

未登录

响应参数:

参数名称

参数说明

类型

schema

code

响应状态码 (成功200, 失败500)

integer(int32)

integer(int32)

data

需要返回的数据(该接口可忽略)

string

detailMsg

详细的消息内容,一般用于显示错误的原因

string

detailMsg

message

返回信息

string

show

在浏览器端的默认信息中是否显示(该接口可忽略)

boolean

success

是否成功

boolean

响应示例:

        成功:

{

  "success": true,

  "message": "添加PO单信息成功; PO单号【po001】",

  "detailMsg": "",

  "show": true,

  "code": 200,

  "data": null

}

        失败:

{

  "success": false,

  "message": "入参校验失败!",

  "detailMsg": "项目编号不能为空; ",

  "show": true,

  "code": 500,

  "data": null

}

开发步骤:

有点多,我先把代码粘贴上来

因为本质上还是接口,所以我们还是用事务代码SE37进行开发,进行导入导出参数的设置、源代码编写,今天太晚了,明天重新编辑一下

FUNCTION ZZMM_PO_TO_RDM_TEST.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_FRDAT) TYPE  FRGDT
*"     VALUE(I_EBELN) TYPE  EBELN
*"     VALUE(I_BANFN) TYPE  BANFN
*"     VALUE(I_ZZRDMNO) TYPE  ZERDMNO
*"  EXPORTING
*"     VALUE(E_RTYPE) TYPE  BAPI_MTYPE
*"     VALUE(E_RTYMSG) TYPE  BAPI_MSG
*"  TABLES
*"      T_DATA STRUCTURE  ZSMM0093
*"----------------------------------------------------------------------MACRO_SAVE_LOG_BEFORE_PROC.MACRO_SAVE_LOG_AFTER_PROC 'IN'.DATA LO_DATA TYPE REF TO DATA.DATA LV_ECS_JSON_REQ TYPE STRING.DATA: LV_ECS_JSON_RES TYPE STRING,LV_URL          TYPE STRING,
*        LV_URL          TYPE CHAR200,LV_MSG          TYPE STRING,LV_TYPE         TYPE BAPI_MTYPE.DATA GS_ECS_REQ TYPE zsMM0097.DATA GS_ECS_RET TYPE zsMM0098.DATA GT_ECS_INV_MAPPING TYPE /UI2/CL_JSON=>NAME_MAPPINGS.DATA GT_ECS_MAPPING_RET TYPE /UI2/CL_JSON=>NAME_MAPPINGS.GS_ECS_REQ-ORDERDATE = I_FRDAT.GS_ECS_REQ-PRNO = I_BANFN.GS_ECS_REQ-pOno = i_EBELN.GS_ECS_REQ-PROJECTCODE = I_ZZRDMNO.APPEND LINES OF t_DATA[] TO GS_ECS_REQ-DETAILS.LO_DATA = REF #( GS_ECS_REQ ).IF LO_DATA IS NOT BOUND.MACRO_SAVE_LOG_AFTER_PROC 'OUT'.RETURN.ENDIF."获取接口地址:配置成后台表SELECT SINGLE * FROM ZTMMURLWHERE Zname = 'PO_URL_RDM'INTO @DATA(LS_ZTMMURL).IF LS_ZTMMURL-ZVAL IS INITIAL.E_RTYPE = 'E'.E_RTYMSG = '接口地址未配置,请到ZTMMURL表中配置接口地址'.MACRO_SAVE_LOG_AFTER_PROC 'OUT'.RETURN.ENDIF.LV_URL = CONV CHAR200( LS_ZTMMURL-ZVAL ).CONDENSE LV_URL NO-GAPS.
*设置JSON字符转换GT_ECS_INV_MAPPING = VALUE #(( ABAP = 'DETAILS' JSON = 'detailInfoList'  )
( ABAP = 'BNFPO'  JSON = 'prRowNo' )
( ABAP = 'EBELP'  JSON = 'rowNo' )
( ABAP = 'MATNR'  JSON = 'materialNo' )
( ABAP = 'TXZ01'  JSON = 'materialName' )
( ABAP = 'LOEKZ'  JSON = 'status' )
( ABAP = 'NETPR'  JSON = 'unitPrice' )
( ABAP = 'BRTWR'  JSON = 'totalPrice' )
( ABAP = 'MENGE'  JSON = 'count' )
( ABAP = 'ORDERDATE'  JSON = 'orderDate' )
( ABAP = 'PONO'  JSON = 'poNo' )
( ABAP = 'PRNO'  JSON = 'prNo')
( ABAP = 'PROJECTCODE'  JSON = 'projectCode' )).GT_ECS_MAPPING_RET = VALUE #(( ABAP = 'code'         JSON = 'code')( ABAP = 'data'         JSON = 'data')( ABAP = 'detailmsg'    JSON = 'detailMsg')( ABAP = 'message'      JSON = 'message')( ABAP = 'show'         JSON = 'show')( ABAP = 'success'      JSON = 'success')).
*将ABAP数据转换为JSON格式CALL METHOD /UI2/CL_JSON=>SERIALIZEEXPORTINGDATA          = LO_DATA
*     COMPRESS      = 'X'PRETTY_NAME   = /UI2/CL_JSON=>PRETTY_MODE-LOW_CASENAME_MAPPINGS = GT_ECS_INV_MAPPINGRECEIVINGR_JSON        = LV_ECS_JSON_REQ.*创建CLIENTDATA:lo_http_client TYPE REF TO if_http_client.DATA l_resp TYPE string.
DATA:tt_headfield TYPE TIHTTPNVP .CALL METHOD cl_http_client=>create_by_urlEXPORTINGurl                = lv_url"APIIMPORTINGclient             = lo_http_clientEXCEPTIONSargument_not_found = 1plugin_not_active  = 2internal_error     = 3OTHERS             = 4.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO E_RTYMSG.E_RTYMSG = '创建client错误,错误信息: ' && E_RTYMSG.E_RTYPE  = 'E'.RETURN.ENDIF.lo_http_client->request->set_method('POST').CALL METHOD lo_http_client->request->if_http_entity~set_header_fieldEXPORTINGname  = 'Content-Type'value = 'application/json'.IF tt_headfield[] IS NOT INITIAL.CALL METHOD lo_http_client->request->if_http_entity~set_header_fieldsEXPORTINGfields = tt_headfield[].ENDIF.IF LV_ECS_JSON_REQ IS NOT INITIAL.DATA(l_conten_len) =  strlen( LV_ECS_JSON_REQ ).CALL METHOD lo_http_client->request->if_http_entity~set_cdataEXPORTINGdata   = LV_ECS_JSON_REQoffset = 0length = l_conten_len.ENDIF.
*发送请求CALL METHOD lo_http_client->sendEXPORTINGtimeout                    = 300EXCEPTIONShttp_communication_failure = 1http_invalid_state         = 2http_processing_failed     = 3http_invalid_timeout       = 4OTHERS                     = 5.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO E_RTYMSG.E_RTYMSG = '发送请求错误,错误信息: ' && E_RTYMSG.E_RTYPE  = 'E'.CALL METHOD lo_http_client->close.RETURN.ENDIF.
*返回请求CALL METHOD lo_http_client->receiveEXCEPTIONShttp_communication_failure = 1http_invalid_state         = 2http_processing_failed     = 3OTHERS                     = 4.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO  E_RTYMSG.E_RTYMSG = '返回请求错误,错误信息: ' &&  E_RTYMSG.e_Rtype = 'E'.CALL METHOD lo_http_client->close.RETURN.ENDIF.
*转换后的JSON字符串赋值CALL METHOD lo_http_client->response->if_http_entity~get_cdataRECEIVINGdata = l_resp.LV_ECS_JSON_RES = l_resp.
*关闭请求CALL METHOD lo_http_client->close.
*读取远程服务器返回的处理结果LO_DATA = REF #( GS_ECS_RET ).CALL METHOD /UI2/CL_JSON=>DESERIALIZEEXPORTINGJSON          = LV_ECS_JSON_RESNAME_MAPPINGS = GT_ECS_MAPPING_RETCHANGINGDATA          = LO_DATA.SEARCH LV_ECS_JSON_RES FOR 'false'.GS_ECS_RET-SUCCESS = XSDBOOL( SY-SUBRC NE 0 ).IF GS_ECS_RET-SUCCESS EQ ABAP_TRUE.E_RTYPE = 'S'.ELSE.E_RTYPE = 'E'.ENDIF.E_RTYMSG = GS_ECS_RET-MESSAGE.MACRO_SAVE_LOG_AFTER_PROC 'OUT'.ENDFUNCTION.

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 泛型类型,存在确定得属性,剩下的属性都是通过泛型传进来
  • 【数据结构的——红黑树】
  • Javascript——宏任务微任务与JavaScript引擎的事件循环(Event Loop)和任务调度
  • C语言求平方和倒数
  • 【区块链+社会公益】第一反应互助急救链 | FISCO BCOS应用案例
  • leetcode50. Pow(x, n),快速幂算法
  • Java 代码详解:删除链表中的倒数第 N 个节点
  • JavaScript 数组迭代
  • WPF篇(5)- Border控件(边框布局)+GridSplitter分割窗口
  • Linux虚拟化技术的演进:Xen与KVM的历程与影响
  • 【Kubernetes】k8s集群之Pod容器资源限制和三种探针
  • 河南萌新联赛2024第(四)场:河南理工大学补题(B,C,I)
  • 软件测试面试题汇总,超详细整理。。。
  • 【https】无法安装OpenSSL时如何在局域网开通https服务
  • 常见8种数据结构
  • echarts的各种常用效果展示
  • java8 Stream Pipelines 浅析
  • javascript面向对象之创建对象
  • Leetcode 27 Remove Element
  • MobX
  • mysql常用命令汇总
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Web Storage相关
  • Yii源码解读-服务定位器(Service Locator)
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 给第三方使用接口的 URL 签名实现
  • 检测对象或数组
  • 跨域
  • 利用DataURL技术在网页上显示图片
  • 码农张的Bug人生 - 见面之礼
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 使用权重正则化较少模型过拟合
  • 树莓派 - 使用须知
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 小程序开发之路(一)
  • ionic入门之数据绑定显示-1
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ## 1.3.Git命令
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #1015 : KMP算法
  • #define与typedef区别
  • #NOIP 2014# day.2 T2 寻找道路
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • $nextTick的使用场景介绍
  • (06)金属布线——为半导体注入生命的连接
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (八)c52学习之旅-中断实验
  • (二)换源+apt-get基础配置+搜狗拼音
  • (简单) HDU 2612 Find a way,BFS。
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转载)Linux网络编程入门
  • *Django中的Ajax 纯js的书写样式1
  • .DFS.