前言:在项目中遇到任务PO接口,需求是SRM发送采购订单信息给SAP,SAP根据信息调用BAPI同步数据,在此作为案例记录。

本次接口采用的协议是SOAP,当然也有其他的协议比如REST等等,在此不做说明。

同步PO接口开发步骤:

  1. 通过SAP NetWeaver注册PO接口服务;
  2. 通过SAP SPROXY创建服务实施代理类;

1.注册接口服务

1.1 登录SAP NetWeaver网页

根据BASIC提供的PO组件网址以及账号密码登录:https://{ip}:{port}/dir/start/index.jsp



PO接口配置相关的属性都会在这个网页中进行。

1.2 配置ESR( Enterprise Services Repository)



会下载一个repository.jnlp文件,这个文件必须用java开发工具集JDK里面的JRE运行环境中的javaws.exe文件运行打开,在java高版本中JRE里面是没有这个文件的,本人亲测大概只有JDK1.8.2-1.8.5这几个版本目前存在javaws.exe文件,如果电脑无法运行jnlp文件可以尝试更换JDK版本。

在此附上几个国内JDK镜像下载地址:

确认电脑JRE中存在javaws.exe文件后,我们用下载repository.jnlp文件后,选择用电脑JRE中的javaws.exe文件打开:



有些浏览器可能会报异常消息,忽略保留文件



上图的Java(TM) Web Start Launcher 就是用来打开jnlp文件的应用,这里显现是因为我已经不是第一次打开了,如果你是第一次打开jnlp,需要选择下面的更多应用,找到JRE中的javaws.exe文件打开,后续就会出现JWSL图标,不用再重新选择。

打开后会有陆续画面闪过,第一次可能还要同意,允许之类的,我们都选择允许。



最后会打开一个如下图的界面:



里面有多个已经创建好的技术系统,我们这次的例子是跟SRM进行交互,所以接口配置会放在SRM下,如果是刚开始配置PO接口,我们就需要从头开始创建产品、技术系统等等,本例中因篇幅的关系不做过多说明。

1.3 ESR详细配置

1.3.1 创建命名空间

打开SRM技术系统后看见多个命名空间,我们的接口配置属性都会放在命名空间下,命名空间能够保证接口的唯一性。



命名空间的命名规则:一般为技术系统域名/平台/模块,如上面的:https://srm.com/SAP/MM

如何创建命名空间



1.3.2 创建文件夹

打开命名空间,发现有许多的文件夹,这里每一个文件夹对应一个接口,我们要配置采购订单创建修改接口,自然也需要创建一个文件夹:

选中命名空间:





创建完成后,在命名空间里就能看到文件夹,左上角有个红色标记,表示未激活,所以我们需要激活文件夹:







激活完成后,红色标识会消失,表示成功激活

1.3.3 创建DT(Data Type)

命名规则:DT_{系统}_{接口描述:首字母大写}_In/Out

创建:DT_ERP_Po_Create_And_Update_In

选择文件夹,右键New:

















同样的步骤创建采购订单创建修改接口传出数据类型结构:DT_ERP_Po_Create_And_Update_Out

1.3.4 创建MT(Message Type)

命名规则:MT_{系统}_{接口描述:首字母大写}_In/Out

创建:MT_ERP_Po_Create_And_Update_In

选择文件夹,右键New:





先保存,再激活;然后以同样的步骤创建:MT_ERP_Po_Create_And_Update_Out

1.3.5 创建SI(Service Interface)

命名规则:SI_{系统}_{接口描述:首字母大写}_In/Out

创建:SI_ERP_Po_Create_And_Update_In

选择文件夹,右键New:



先保存,再激活;然后以同样的步骤创建:SI_ERP_Po_Create_And_Update_Out 但是有些区别:如下图

1.3.6 创建MM(Message Mapping)

命名规则:MM_{系统}_{接口描述:首字母大写}_In/Out

创建:MM_ERP_Po_Create_And_Update_In

选择文件夹,右键New:



右边也是选择同一个MT



先保存,再激活;然后以同样的步骤创建:MM_ERP_Po_Create_And_Update_Out

1.3.7 创建OM(Operation Mapping)

命名规则:OM_{系统}_{接口描述:首字母大写}

OM只需要创建一个,所以不分In和Out

创建:MM_ERP_Po_Create_And_Update

选择文件夹,右键New:



如此我们在ESR中的配置就完成了,接下来需要去配置IB

1.4 配置ID(Integration Directory)

点击IB之后会现在一个directory.jnlp文件。我们同样下载并打开。



最后打开一个如下界面:



打开社区组件,看到有Business System 和 Business Component,由于本接口是SRM作为发送方,SAP作为接收方,所以需要在各自业务系统里创建用于接受数据协议的适配器类型:

SRM方面:





















上面WSDL的地址就是该接口的访问地址,等下在后面测试的时候要用到,回头提供给第三方SRM调用

注意:如果后来有调整DT的字段,一定要重新映射下字段即把之前MM的映射删除,重联一下。

2.SAP端创建代理实施类

登录SAP GUI,使用事务码:SPROXY

在这个事务码下可以看见之前在ESR配置技术系统下的所有接口信息,依次打开路径:Source->ESR->技术系统->命名空间,找到我们配置的接口SI:





同步代理类激活的时候会自动产生一些结构和代理实施类,我们可以在类方法中查看参数,进行逻辑处理,后续有接口字段调整,需要右键重新生成,然后再激活。





然后激活代理类,这样整个接口从配置到开发就完成了,接下来测试下我们开发的接口

3.测试

如果是同步接口,可以直接通过SPROXY测试,点击激活按钮旁边的执行,可以看到接口的XML形参,点击工具栏的编辑按钮,输入实际数据,再点击执行,就可以看到接口的返回结果;

除此之外,还可以用第三方工具测试接口的功能,接口测试工具很多,本次选择SOAP UI,是一款免费开源的接口测试工具,同意有付费版本,不过免费的就可以满足日常的使用了,这里简单介绍如何用SOAP UI测试我们开发的接口。

3.1 打开SOAP UI软件,新建SOAP PROJECT:















看到以上就说明我们PO接口开发从配置->开发->测试圆满的成功了。本次案例是一个同步接口作为说明,至于异步模式以及其他协议的接口,以后有机会再说明。

记录ABAP开发的日常——SAP_PO开发同步接口案例的更多相关文章

  1. IOS开发之记录用户登陆状态,ios开发用户登陆

    IOS开发之记录用户登陆状态,ios开发用户登陆 上一篇博客中提到了用CoreData来进行数据的持久化,CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreDa ...

  2. A记录都不懂,怎么做开发Leader?

    开发 Leader 和一线开发的区别在于:普通一线开发很多时候都只接触业务编码,不需要关注除开发之外的其他事情.但是作为一个开发 Leader,不仅仅需要懂开发层面的东西,还需要懂得运维层面的东西. ...

  3. FastAdmin 开发时如何与官方同步升级

    FastAdmin 开发时如何与官方同步升级 使用 FastAdmin 开发时为了与官方同步升级,推荐使用 git 管理代码. 官网上提供的完整包是为了方便第一次使用的人快速测试. 我一般是给官方的 ...

  4. 同步OR异步?WebFlux开发真的比Servlet开发要快?顺便再科普下CompletableFuture

    在看下文之前,先给大家科普一点基础知识 Runable:线程任务类接口,没有返回值 Callable:与上面的不同就是有返回值 Executor:定义了线程池执行任务的接口,不过只定义了Runable ...

  5. 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序

    直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...

  6. android开发1:安卓开发环境搭建(eclipse+jdk+sdk)

    计划折腾折腾安卓开发了,从0开始的确很痛苦,不过相信上手应该也不会太慢.哈哈 一.Android简介 Android 是基于Linux内核的软件平台和操作系统. Android构架主要由3部分组成,l ...

  7. React Native开发 - 搭建React Native开发环境

    移动开发以前一般都是原生的语言来开发,Android开发是用Java语言,IOS的开发是Object-C或者Swift.那么对于开发一个App,至少需要两套代码.两个团队.对于公司来说,成本还是有的. ...

  8. 【招聘】.NET高级开发、前端高级开发、测试工程师

    .NET架构师 工作地点:厦门-湖里区 工作年限:5年及以上 学历要求:大专或以上 工资范围:15000元 - 25000元 福利待遇:五险一金,带薪年休假,年度旅游,丰富的员工团队活动:生日会.中秋 ...

  9. 微信js-sdk开发获取签名和获取地理位置接口示例

    ###微信js-sdk开发获取签名和获取地理位置接口示例 前言:在做微信公众号开发时需要获取用户的地理位置信息,之前通过高德或者百度.腾讯等地图的api时发现经常获取不到,毕竟第三方的东西,后来改为采 ...

随机推荐

  1. java 常用类库:Object类和Objects类

    1,Object类: Object类是所有的类,数组,枚举的父类,也就是说,JAVA中允许把任何的对象赋值给Object类(包括基础数据类型),当定义一个类的时候,没有使用extends关键字显示指定 ...

  2. 同步IO与一部IO、IO多路复用(番外篇)select、poll、epoll三者的区别;blocking和non-blocking的区别 synchronous IO和asynchronous IO的区别

    Python之路,Day9 , IO多路复用(番外篇)   同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. ...

  3. BitBake使用攻略--BitBake的语法知识一

    目录 写在前面 1. BitBake中的赋值 1.1 直接赋值 1.2 间接赋值 1.3 追加与前加赋值 1.4 Override风格的赋值语法 1.5 标志赋值 1.6 内联函数赋值 1.7 其他一 ...

  4. 【LeetCode】374. Guess Number Higher or Lower 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  5. 【LeetCode】478. Generate Random Point in a Circle 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/generate ...

  6. 【LeetCode】769. Max Chunks To Make Sorted 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  7. [源码解析] PyTorch 分布式之弹性训练(5)---Rendezvous 引擎

    [源码解析] PyTorch 分布式之弹性训练(5)---Rendezvous 引擎 目录 [源码解析] PyTorch 分布式之弹性训练(5)---Rendezvous 引擎 0x00 摘要 0x0 ...

  8. 从头造轮子:python3 asyncio 之 run(2)

    前言 书接上文,本文造第二个轮子,也是asyncio包里面非常常用的一个函数run 一.知识准备 ● 相对于run_until_complete,改动并不大,就是将入口函数重新封装了一下,基础知识主要 ...

  9. <学习opencv>图像和大型阵列类型

    OPenCV /*=========================================================================*/ // 图像和大型阵列类型 /* ...

  10. 使用 jQuery 选择器获取页面元素后,利用 jQuery 对象的 css() 方法设置其样式。

    查看本章节 查看作业目录 需求说明: 使用 jQuery 选择器获取页面元素后,利用 jQuery 对象的 css() 方法设置其样式. 要求如下: 点击页面的"更改样式"按钮后, ...