BAPI是什么

  • BAPI是啥
    • 对象是啥
    • 类是啥
    • 继承是啥
    • 接口是啥
    • package是啥
  • BAPI怎么用

BAPI是啥

SAP BAPI(业务应用程序编程接口),是针对业务对象模型的标准接口。BAPI是客户代码和第三方应用程序和SAP交互的主要方法。BAPI封装了SAP业务对象模型的内部层,以确保在访问或者更改业务对象时正确执行所有的业务逻辑,验证和授权检查。
就是Business API.

接口有个封装的概念,好了,是时候把一波概念写一遍了。
要不然我都忘光了。

讲接口之前,先看看对象是啥,我依稀记得是Java课上讲的,但是Java我们就几节课。只记得几个字:基于对象。。。

对象是啥

object, 对象是有相关状态行为的。在开发里面的对象,通常用来指代(更准确的说用来建模)现实世界中的对象。把日常生活中的对象折射到开发世界,这些概念就好理解了。现实世界中,你我都是一个独立的对象,都是人,身高体重几何,一天吃三顿五顿,每天固定干啥。
那么这个软件世界中的对象,你就要表示出它的状态和行为。这里就要介绍到数据封装的概念。

抬眼看看,周围,我们的电动车,手机都是对象。只要是对象,都有两个特性:状态和行为。在开始考虑基于对象编程之前,先考虑现实对象:电动车状态:白色,两轮,有后备箱。行为:加速,刹车,减速,倒挡(没有)。想想你当下,周围,你目所能及的东西,有啥状态,能执行啥行为(功能)。你想想看,花花世界,复杂而多样,有些东西功能多,有些东西功能少。你的眼镜盒,只有开着和关着两种状态,被开和被关两种行为。你的耳机,打开,关闭,暂停,音量调节都可以。而你的手机,那就复杂了,它已经包含了太多的元器件,每个都有很多功能,一时间无从说起。

好了,到这里再来看,各种状态,我们用fields字段来表示,各种行为我们用methods方法来表示。也就是说一个对象把自己的状态存储在fields里面,并且用methods来表示自己的行为。
这个fields和methods呢,某些情况下也叫variable和function,都是一个意思。方法是基于对象的状态来执行,并且是对象与外部对象交互的主要机制。也就是你做了什么,和别人交互了啥,那只能是通过你的行为。对象封装就是表示隐藏了一个对象的内部状态,并且要求所有交互通过对象的方法执行。这就是基于对象编程的基本原理。

具体来说是怎样的呢?首先赋予一个对象状态,然后提供更改状态的方法。还来看咱的电动车,当前被赋予的状态:当前速度,当前挡位。那我可以通过提速和换挡的方法来改变我的当前状态。而且新国标的最大速度25km/h,也就是规定了,我再提速,也不能超过这个速度。也就是我提速这个方法是有限制的,需要小于25。这也就是说和外部的交互,有时候会被内部的状态限制。

在对象上写入方法的好处是啥呢?也就是将方法绑定到对象上,以下好处:
1.模块化:一个对象的源代码可以独立于其他对象的源代码来编写和维护。对象一旦创建,就可以在系统内部轻松地传递。

2. 信息隐藏:通过只与对象的方法交互,其内部实现的细节对外部世界保持隐藏。

3. 代码重用:如果一个对象已经存在(可能是由另一个软件开发人员编写的),则可以在程序中使用该对象。这允许专家实现/测试/调试复杂的任务特定对象,然后你可以信任这些对象在自己的代码中运行。

4. 可插拔性和调试简易性:如果某个特定对象出现问题,您可以简单地将其从应用程序中删除,然后插入另一个对象作为其替代对象。这类似于解决现实世界中的机械问题。如果螺栓坏了,你要更换它,而不是整个机器。

类是啥

所谓物以类聚,人以群分。这把class翻译成类的真是个人才,我搞一个模子,然后造了N个行李箱。所有的行李箱都是咱这一类。有相同的造型和功能。于是咱讲,你这个行李箱就是这个行李箱类的一个实例。所有对象呢,都是基于这一套蓝图包含相同的组件。类就是单个对象创建的蓝图。


// class Bicycle {int cadence = 0;int speed = 0;int gear = 1;void changeCadence(int newValue) {cadence = newValue;}void changeGear(int newValue) {gear = newValue;}void speedUp(int increment) {speed = speed + increment;   }void applyBrakes(int decrement) {speed = speed - decrement;}void printStates() {System.out.println("cadence:" +cadence + " speed:" + speed + " gear:" + gear);}
}

以上是个Java语法,基于对象的定义,在类里有几个状态:cadence,speed,gear。还定义了几个方法:changeCadence,changeGear,speedUp等,定义了和外部世界的交互行为。
以上的类没有包含main这个方法。因为它不是一个完整的应用。只是个可能被用到应用中的bicycle的蓝图。创建和使用新bicycle对象的职责在别的类里。
下面有个类,创建了两个bicycle对象,并且引用了他们的方法。

class BicycleDemo {public static void main(String[] args) {// Create two different Bicycle objectsBicycle bike1 = new Bicycle();Bicycle bike2 = new Bicycle();// Invoke methods on those objectsbike1.changeCadence(50);bike1.speedUp(10);bike1.changeGear(2);bike1.printStates();bike2.changeCadence(50);bike2.speedUp(10);bike2.changeGear(2);bike2.changeCadence(40);bike2.speedUp(10);bike2.changeGear(3);bike2.printStates();}
}

运行的结果如下:

cadence:50 speed:10 gear:2
cadence:40 speed:20 gear:3

继承是啥

不同种类的对象呢,有时候是由很多组件或者特性是一样的。
就拿经典自行车来举例子,山地车,城市车,一般自行车,都有一些相同的特性,都有属性当前速度,当前挡位。然后还得有些不同的特性,要不然咋区分价格。山地车有些还带记速器,夜灯,还有一个链条盘。一般的车还得带个车篓子。
基于对象编程允许类来继承共用的状态和行为。也就是说自行车作为老子,儿子有山地车,城市车,公共自行车。在Java里面,每个类都可以有一个直接的父类,父类可以有无限多的子类。用extends来定义子类,后面是要继承的父类。

class MountainBike extends Bicycle {// 子类新字段和方法new fields and methods defining a mountain bike would go here}

已经继承了父类的字段和方法,子类的实现里只要写出自己独特的字段和方法。

接口是啥

好了现在回到接口是啥,现在咱知道了,对象通过定义自己的方法来和外界交互。方法就形成了对象和外界的接口。通过打开电脑电源开关,我们获得了和塑料外壳包裹的一系列计算组件的交互。这个开关就是个接口。
接口就是一组相关的方法的空主体

interface Bicycle {//  wheel revolutions per minutevoid changeCadence(int newValue);void changeGear(int newValue);void speedUp(int increment);void applyBrakes(int decrement);
}

为了实现这个接口,类的名字可能会改变,比如说针对某个品牌的自行车:在类声明中使用这个关键字:implements

class ACMEBicycle implements Bicycle {int cadence = 0;int speed = 0;int gear = 1;// The compiler will now require that methods// changeCadence, changeGear, speedUp, and applyBrakes// all be implemented. Compilation will fail if those// methods are missing from this class.void changeCadence(int newValue) {cadence = newValue;}void changeGear(int newValue) {gear = newValue;}void speedUp(int increment) {speed = speed + increment;   }void applyBrakes(int decrement) {speed = speed - decrement;}void printStates() {System.out.println("cadence:" +cadence + " speed:" + speed + " gear:" + gear);}
}

实现接口可以使类对它承诺提供的行为变得更加正式。接口在类和外部世界之间形成一个契约,这个契约在编译时由编译器强制执行。如果你的类声明实现接口,则该接口定义的所有方法必须出现在其源代码中,然后类才能成功编译。

要实际编译ACMEBicycle类,需要在实现的接口方法的开头添加public关键字。

package是啥

是一个组织了一组类和接口的命名空间。类似文件夹,一个程序可能有几千个类,那我们把同一类的类和接口放到一个怕卡个里。方便查找。
类库就是很多个package。Java平台提供了很多类库,被称作API,应用程序接口。
它的packages里是通用编程最常见的任务。例如,字符串对象包含字符串的状态和行为;文件对象允许程序员轻松地创建、删除、检查、比较或修改文件系统上的文件;套接字对象允许创建和使用网络套接字;各种GUI对象控制按钮和复选框以及与图形用户界面相关的任何内容。实际上有成千上万的类可供选择。咱们可以专注于特定应用程序的设计,而不是使其工作所需的基础设施。

BAPI怎么用

BAPI是以function module的形式实现,来调用SAP的内部代码。根据所使用的BAPI集,可以调用使用Business Objects Processing Framework(这玩意我也不知道是啥)定义的业务对象模型,或者调用使用程序,表和功能模块定义的旧模型。
BAPI公开的正式而稳定的接口,客户和第三方代码的开发人员可以使用他们来访问SAP业务对象,并与之建立接口。SAP也保证了这个方式未来一直可用。
也有其他接口访问SAP基础表和非BAPI功能模块,程序,类。但是SAP不保证代码在未来一直可用,或者被访问的对象会一直存在。
像上述的非BAPI接口使用会导致万一内部功能模块的签名更改,则升级过程中的会有小问题或者需要小补丁,从而使基于盖接口的代码失效。

BAPI只能在发布后才能使用,也就是说SAP指定说这些接口可用,并且保证以后稳定。可以通过查看功能模块BAPI的“属性”部分中的“发布日期”来检查发布状态。如果该字段为空,那么BAPI尚未由SAP发布,因此不应使用。
为了在高级业务应用程序编程(ABAP)语言中使用BAPI,开发人员使用ABAP的call function来调用function module。另外,大多数bapi都支持远程,这意味着可以通过远程函数调用(remote function call ,RFC)、web服务或SAP的Java连接器来调用它们。

在基于ABAP平台的每个SAP产品中,有一些bapi可以实现大多数业务流程的完全自动化。每个SAP产品的文档提供了有关可用BAPI的一些信息。在SE37和se80或ABAP for Eclipse中搜索以BAPI开头的功能模块可以查询到相关信息。

每个BAPI功能模块都应具有多种语言的广泛文档,可通过SE37中的function module documentation选项访问。仔细阅读文档非常重要,因为bapi的结构和行为差异很大,而且它们有时会以意想不到的方式工作,或者在不满足其需求的情况下失败,并显示隐藏的错误消息。

许多BAPI具有复杂的结构,这些结构模仿底层的业务对象结构。如上图用于修改业务伙伴地址的BAPI包含多个导入结构以及大量表参数,这些参数可以向BAPI传递附加信息,也可以从BAPI传递附加信息。
图中两个重要参数是ADDRESSDATA和ADDRESSDATA_X。这种类型的配对是bapi的典型类型,其中第二个结构是一组标志,精确地指示哪些字段应该更新。

因为bapi是作为function module来实现的,所以它们不适合ABAP面向对象编程(OOP)的类、方法和接口范例。尽管如此,它们通常是以面向对象的方式实现的,因为它们是SAP业务对象的接口。
在ABAP中,这些功能模块可以从程序、函数模块或类中调用。通常最好在数据访问对象(DAOs)中包装BAPI调用,DAO是封装对BAPI调用的类。这样做可以使用DAO的模拟版本进行单元测试,从而允许对开发人员代码的测试与BAPI调用本身的测试分开。

SAP BAPI是个啥相关推荐

  1. SAP BAPI的一些初级资料

    周围的人都比较忙,一切得靠自己学,慢慢摸索. BAPI有的是类,有的是函数.'Business application programming interface'的简称. BAPI is 'Busi ...

  2. 外行假装内行,我也来谈谈SAP BAPI和BADI

    外行假装内行,我也来谈谈SAP BAPI和BADI A, 什么是BAPI? BAPI是business application programming interface的缩写,是面向对象程序设计方法 ...

  3. SAP BAPI BAPI_GOODSMVT_CREATE Goods movement

    这个BAPI一直还活着,不知道为什么,可能SAP没工夫升级吧... 今天主要是GM_CODE的问题,对应如下,同时下面转一个同学的文章... GM_CODE Tcode 描述 MovementType ...

  4. SAP BAPI创建交货单拆单原因调查

    基础知识 创建交货单有如下场景以及对应BAPI,如下: 1)根据销售订单 / 销售计划协议创建外向交货单,对应Tcode VL01N,调用BAPI_OUTB_DELIVERY_CREATE_SLS 或 ...

  5. SAP BAPI BAPI_PO_CREATE1创建采购订单

    使用BAPI: BAPI_PO_CREATE1创建采购订单,默认情况下行项目是自动编号的. 代码示例: DATA:lt_poheader LIKE TABLE OF bapimepoheader WI ...

  6. SAP BAPI 创建批次 未保存内部对象号

    使用BAPI:BAPI_BATCH_CREATE 创建批次时,能够保存成功,但是MCH1表和KSSK表中没有内部对象号. 无奈,查找源码. 最后在BAPI中调用的这个函数这里找到了问题.此处kzcla ...

  7. SAP BAPI 入门教程

    目录 一.数据定义及介绍 二.参数赋值 三.BAPI调用 一.数据定义及介绍 DATA: return TYPE bapiret2.   "返回信息 DATA:goodsmvt_header ...

  8. SAP BAPI 生产订单确认相关

    查询确认清单 BAPI_PRODORDCONF_GETLIST 返回 表:CONFIRMATIONS 字段 类型 长度 精度 说明 CONF_NO NUMC 10 0 操作完成的确认编号 CONF_C ...

  9. JAVA与SAP数据交互的方式总结

    JAVA与SAP数据交互的方式总结 RFC方式:Java程序直接通过RFC访问SAP的对象(或称函数,可能叫法不对)     SAP提供了BAPI(Business Application Progr ...

最新文章

  1. MYSQL数据库字母数字混合字段排序问题
  2. SendMessage CString
  3. Cortex_m3的启动过程
  4. 二进制编译安装mysql_MariaDB通用二进制编译安装详解
  5. c语言试卷大全,C语言试题大全
  6. 零基础入门深度学习(5) - 循环神经网络
  7. windows双屏切换
  8. DirectX9 ShadowMap例子学习笔记
  9. Linux实用小工具
  10. IS-IS详解(十九)——IS-IS 与IPv6
  11. fh 幅频特性曲线怎么画fl_放大电路幅频特性曲线的测试方法.PPT
  12. ios加密算法AES
  13. TCP长连接和短连接-深入浅出(还在总说http长连接吗)
  14. Spring框架学习总结(上)
  15. solidity合约调用合约方法的方式
  16. Arcgis 地理配准步骤(底图校正)
  17. 给深度学习新手做项目的10个建议
  18. 洛谷 1144 最短路计数 bfs
  19. 关于强类型语言和无(弱)类型语言——致编程入门者
  20. linux查看cp2102,微雪电子CP2102(type A)USB转USART简介

热门文章

  1. 微信头像失效_微信头像地址失效踩坑记附带解决方案
  2. 设置py文件在pycharm里的工作环境/路径
  3. input验证邮箱 css,jquery验证邮箱格式并显示提交按钮
  4. 基于ArUco的视觉定位(一)
  5. OpenGL 动画的制作
  6. vue下利用canvas实现在线图片标注
  7. Java基于Redis实现“附近的人”(含源码下载)
  8. 王冰玉时代曙光科技 丽江-稻城-理塘-丹巴-康定-成都“中心"穿越小卡片之旅...
  9. 支付宝公布2019集五福攻略,准备好薅羊毛的正确姿势
  10. 如果电脑蓝屏0xc000021a怎么办