Business Add-ins

阅读更多
本文是BC425中BAPI部分的内容,闲来无事学习一下,顺便翻译记录下来。

Business Add-ins
  本章主要内容以及目标
  寻找badi
  实现badi
  创建badi

  业务情景(business scenario):
  你想对航班维护事务添加一个新功能,但为了对下次升级做最小的调整,所以你希望实现 的方式上修改(modification)用的越少越好,这里你就可以使用SAP提供的方式:BAdls

  动机:
  1:早期增强技术的缺点(disadvantage)
     1.1 只能被使用一次(customer exits)
     1.2 没有屏幕增强(business trasaction events(BTES)
     1.3 没有菜单增强(BTES)
     1.4 没有管理级别(no administration level,BTES)
  2:新的增强技术的要求:
     2.1 重用
     2.2 所有增强类型(程序/菜单/屏幕出口)
     2.3 管理级别
     2.4 通过最新的技术实现

  对象:
  1:类是一个对象的抽象描述,每个对象仅仅在程序运行的时候存在。在这个单元里面,当我们谈论对象,我们可能真正指的是抽象的描述(类),依内容而定。
  2:一个对象由它的类描述,并且由两层组成 - 内部和外部层。
      2.1公有组件:公有组件是类里面对外部可见的组件(例如,属性和方法)。所有类的用户可以直接使用公有组件。一个对象的公有组件组成它的接口。
      2.2私有组件:这些组件仅仅只在对象内部可见,像公有组件一样,私有组件可能是属性和方法。
  3:面向对象的目标是保证一个类能确保它自己的一致性。所以,类的数据通常来说是内部的,也就是说,使用私有属性,一个类的内部(私有)属性只能被这个类的方法所改变。作为一个规则,类的公有的组件是方法,在类里面的方法同数据一起工作,从而确保了类总是一致的。
  4:类通常有个ID来区别于同它拥有同样属性和方法的类。

  函数组作为对象的实例
  1:直到版本4.0,与对象最接近的是函数组和函数。
  2:当你调用一个函数的时候,函数组的实例-同它所有定义的数据-被装载进内部回话的内存区。一个实例是一个真正的软件对象,一个abap程序能因此装载不同函数组实例,通过调用函数组包含的函数,但是,在同一时刻一个函数组只能有一个实例存在。
  3:真正的面向对象和函数组的原理区别在于程序能否同时与多个函数组实例工作,而不是一个函数组的多个实例。举个例子,假如一个程序想要同时管理多个独立的计数器,或者是多条指令。如果我们使用函数组完成这件事,我们可能不得不使用实例管理编程以区别于不同的实例(使用数字,例如)。

  Classes Generalize Function Groups(标题不知道怎么翻译)
  1:在实际当中,使用函数组来实现实例管理将会非常麻烦,所以,数据通常在调用的程序里面,函数组同这些数据一个工作,这就导致了不同的问题。例如,所有的用户不得不与相同的作为函数组的数据结构一起工作。如果你想要去改变函数组的内部数据结构,这就将会影响到很多调用这个函数组的用户,隐式的改变非常难预测。
  2:另外一个问题是所有的用户拥有同一份数据的拷贝,当修改数据的时候就非常难于保证数据的一致性。
  3:在函数组里面使用全局数据非常危险,因为在一个复杂的事物里面,当每个函数组都被装载进来的时候,几乎是不可控的。
  4:这些问题随着类的引入都会迎刃而解,数据和方法都在类里面被定义而不是在函数组里面。abap程序可以与任意数量的同一个类的实例工作。abap程序可以显示的创建运行时类实例,这取代了当函数组被调用时隐式装载单一函数组的运行实例。类的单个的运行实例是唯一的可标识的对象,而且通过对象引用寻址(addressed)。


未完,待续。。。

 
  

你可能感兴趣的:(BADI,BC425,标准教材)