打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SAP BADI的实现-构建BADI

,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.


在上一篇文章中,我们学习了定义一个BADI,提供回调类,实例化一个BADI,以及去调用一个BADI方法。我们也建立了一个enhancement spot作为BADI的容器。

1,建立实现体的容器

定义和实现BADI有一个共同的地方,就是都是需要建立一个容器,我们不能新建一个BADI的实现,如果没有先建立容器的话。在同一个容器中,可以有多个BADI实现,但是前提是要求他们都是属于同一个enhancement spot所对应的BADI。

  • 进入TCode SE80,在enhancement spot中,选择如图按钮
  • 创建一个新的BADI实现容器如图
  • 在接下来的窗口中,要求输入的是作为唯一指定的enhancement spot,一旦建立了这个关联,你就可以建立一个BADI实现,而且是在这个enhancment spot中的。
  • 输入z_bdi_calc_vat_us作为BADI实现的名字,如图

2,BADI类实现

在我们建立了BADI实现容器之后,就可以真正开始建立一个实现类了。

  • 选择BADI实现前面的三角形图标
  • 在实现类这项中,填入z_cl_cal_vat_us
  • 在打开的类构建器中,接口对应的方法已经显示出来,我们需要做的是去完成get_vat
  • 实现这个方法,比如

DATA: percent type p value 4 .

ex_amount_vat = im_amount * percent / 100 .

ex_percent_vat = percent .

现在我们还可以实现另一个实现类,比如Z_CL_CALC_VAT_GB,但是当运行程序时,系统会dump,这是因为我们定义BADI时,是采用了默认的单一使用(single-use),没有选中复合使用选项(Multiple Use Option),单一使用的限制是只能有一个实现类。如何解决这个问题,请看本系列的最后一篇文章,如何使用过滤器。


在上一篇最后引出的问题中,我们需要有一种方法来在不同的BADI实现中切换,这就引出了BADI过滤器的概念。我们可以为一个BADI定义多个过滤器。在本例中,我们只需要一个过滤器。

  • 进入到enhancement spot,然后选中Enh. Spot Element Definition tab。
  • 选中BADI,然后新建过滤器。
  • 输入相应的数据。
  • 激活enhancement spot,选中implementation。
  • 选中第一行后,选中BADI实现体下面的过滤器图标,选择Create Filter Combination按钮;
  • 选择Country作为过滤器,双击Combination1下面的这行,如图。
  • 同理,可以设置另一个USA BADI实现类的过滤器。
  • 现在,我们可以通过一个新的程序来,调用BADI,而且它会根据过滤器的值,选择执行真正的实现类。

 

REPORT Z_DEMO_ENH.

parameters: ctry(2) type c.

DATA: handle TYPE REF TO z_badi_calc_vat,

sum TYPE p,

vat TYPE p,

percent TYPE p.

sum = 50.

GET BADI handle FILTERS Country = ctry.

CALL BADI handle->get_vat

 EXPORTING im_amount = sum

 IMPORTING ex_amount_vat = vat

         ex_percent_vat = percent.

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何通过调试找到自己需要的ABAP增强
BAdI实现全过程实录
SAP中寻找增强的实现方法
学习打算
China retains world's largest spot gold trading market for 8th year
野外生存必备:饮用水的过滤与净化处理,让病菌危害离我们远一些
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服