刚开始写技术博客,就从官方文档的汉化开始,希望对自己和大家都有帮助。我会用自己的语言简洁的写清楚过程,而并非是百分之百的汉化。

1,SAP BADI的由来

大家都知道SAP在ERP行业中,应用最广的是财务领域。由于各个国家财务制度以及税务制度的差异,SAP希望在自己的程序开发平台中引入BADI,能够让开发人员自己编写业务插件,系统会自动调用这些插件程序来完成某种业务运算。本文中的举例是计算不同国家的税率。

2,创建一个Enhancement Spot

这是概念是作为一个BADI的容器,在这个容器里面,我们可以定义自己的BADI。

  • 在TCode SE80中,选择想要创建Enhancement spot所在的package
  • 选择Create->Enhancement->Enhancement Spot,如图
  • 输入这个enhanement spot的名称和描述

 

 

 

 

 

3,创建一个BADI

  • 在新建立的enhancement spot中创建BADI,选择如图中的按钮
  • 输入BADI的名字和描述,如z_badi_calc_vat

 

 

 

 

 

4,定义BADI接口

接下来我们需要一个接口来定义这个BADI所需要用的方法

  • 选择BADI前面的箭头
  • 双选接口,此时可以选择或者输入一个新的接口名
  • 选择新建一个叫if_badi_interface的接口,如图它只有一个方法叫get_vat
  • 设置方法的参数

至此,我们已经建立了一个enhancement spot而且带有一个BADI和一个接口。仅仅如此是不能使用这个BADI的,我们需要一个BADI实例来在程序中被调用。

5,现在我们写一小段程序来调用这个BADI方法get_vat,系统有两个关键字用来得到BADI实例和调用BADI,分别是GET BADI和CALL BADI

DATA: handle TYPE REF TO z_badi_calc_vat,

sum TYPE p,

vat TYPE p,

percent TYPE p.

sum = 50.

GET BADI handle.

CALL BADI handle->get_vat

EXPORTING im_amount = sum

IMPORTING ex_amount_vat = vat

         ex_percent_vat = percent.

WRITE: 'percentage:', percent, 'VAT:', vat.

6,默认的回调类(Fallback Class)

当上述程序运行时,发现没有任何实现的BADI时,系统会抛出异常。在这种情况下,建议使用回调类。即便没有BADI的实现,GET BADI会返回回调类的实例,设置如图

可以把默认的逻辑写在这个回调类中,它会按照接口自动定义好方法,完成默认逻辑,比如

 

DATA: percent TYPE p VALUE 20.

ex_amount_vat = im_amount * percent / 100.

ex_percent_vat = percent.

SAP BADI的实现2-实现BADI

SAP BADI的实现3-使用BADI过滤器

 posted on 2010-04-18 23:05  李查德  阅读(9783)  评论(4编辑  收藏  举报