SAP BAPI是个啥

SAP BAPI是个啥BAPI是什么BAPI是啥对象是啥类是啥继承是啥接口是啥package是啥BAPI怎么用BAPI是啥SAPBAPI(业务应用程序编程接口),是针对业务对象模型的标准接口。BAPI是客户代码和第三方应用程序和SAP交互的主要方法。BAPI封装了SAP业务对象模型的内部层,以确保在访问或者更改业务对象时正确执行所有的业务逻辑,验证和授权检查。就是BusinessAPI.接口有个封装的概念,好了,是时候把一波概念写一遍了。要不然我都忘光了。讲接口之前,先看看对象是啥,我依稀记得是Java课上讲的,

大家好,又见面了,我是你们的朋友全栈君。

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 objects
        Bicycle bike1 = new Bicycle();
        Bicycle bike2 = new Bicycle();

        // Invoke methods on those objects
        bike1.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 minute
    void 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调用本身的测试分开。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163927.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • OSI七层_osi七层模型通俗解释

    OSI七层_osi七层模型通俗解释OSI七层

  • 鸿蒙OS架构及关键技术整理

    鸿蒙OS架构及关键技术整理鸿蒙OS架构及关键技术整理一. 鸿蒙OS整体介绍二. 子系统架构三. 关键技术1.分布式架构首次用于终端OS,实现跨终端无缝协同体验2.确定时延引擎和高性能IPC技术实现系统天生流畅3.基于微内核架构重塑终端设备可信安全4.通过统一IDE支撑一次开发,多端部署,实现跨终端生态共享四. 参考资料一. 鸿蒙OS整体介绍HarmonyOS简介原作者:xiangzhihong8前两天,华为发布了HarmonyOS2.0,俺也赶个时髦,给大家简单介绍下HarmonyOS。定义首先,我们来看一下官

  • PHP进销存erp源码库存管理系统

    PHP进销存erp源码库存管理系统PHP进销存erp源码库存管理系统(2次开发另外收费)本系统开发PHP+MySQL采用CI2.x框架本系统运行环境php5.3+mysql5.5支持IIS、apache不支持nginx源码网站:www.phprr.com演示地址:http://www.phprr.com/show-55账号:admin密码:jxc888888…

  • MySql数据库基本select查询语句练习题,初学者易懂。

    MySql数据库基本select查询语句练习题,初学者易懂。MySQL数据库的基本查询语句题目:

  • pycharm缩进设置_wps首行缩进快捷键

    pycharm缩进设置_wps首行缩进快捷键1、pycharm使多行代码同时缩进鼠标选中多行代码后,按下Tab键,一次缩进四个字符2、pycharm使多行代码同时左移鼠标选中多行代码后,同时按住shift+Tab键,一次左移四个字符Python语言是一款对缩进非常敏感的语言,给很多初学者带来了困惑,即便是很有经验的Python程序员,也可能陷入陷阱当中。最常见的情况是tab和空格的混用会导致错误,或者缩进不对,而这是用肉眼无法分别的…

  • python基础-内置函数详解[通俗易懂]

    python基础-内置函数详解[通俗易懂]一、内置函数(python3.x)内置参数详解官方文档:https://docs.python.org/3/library/functions.html?highlight=built#ascii

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号