此博客为原创博客,都是个人工作经历所得,转载请注明出处

一个BADI中实施多个Implementation

转自:https://blog.csdn.net/zhongguomao/article/details/76251407

业务场景:例如我们需要对国家的税率做一个增强,以完成某种业务运算,但是每个国家的税率又是不同的,所以可以新建一个BADI用于增强国家税率计算,对BADI进行多次实施,分别用于不同国家的税率计算。


1、因为BADI多次实施,需要选中Multiple Use;因为实施的Implementation用于不同场景,需要选中Filter Use。
 

 

2、在BADI:Y_BADI_CALC_VAT1中再实施一个Implementation:Y_BADI_CALC_VAT_GB
 

 


部署Method(Y_CL_CAL_VAT_GB)代码:Y_IF_CALC_VAT~GET_VAT
  METHOD y_if_calc_vat~get_vat.
    DATA: percent TYPE p VALUE 8 .
    ex_amount_vat = im_amount * percent / 100 .
    ex_percent_vat = percent .
  ENDMETHOD.
复制代码

3、在BADI:Y_BADI_CALC_VAT1中新建定义一个Filter
 

 

4、分别在BADI的两个Implemention中设置Filter条件
 

 


Y_BADI_CALC_US的Filter条件为country = US,意思是:当country = US时,执行Y_BADI_CALC_US中Method代码
Y_BADI_CALC_GB的Filter条件为country = GB,意思是:当country = GB时,执行Y_BADI_CALC_GB中Method代码

5、SE38修改调用程序的代码:
DATA: handle  TYPE REF TO y_badi_calc_vat1,
      sum     TYPE p,
      vat     TYPE p,
      percent TYPE p.

PARAMETERS: ctry(2) TYPE c.

START-OF-SELECTION.
  sum = 50.

*获取BADI对象:Y_BADI_CALC_VAT1
  GET BADI handle FILTERS country = ctry.
*调用BADI对象Y_BADI_CALC_VAT1的方法get_vat
  CALL BADI handle->get_vat
    EXPORTING
      im_amount      = sum
    CHANGING
      ex_amount_vat  = vat
      ex_percent_vat = percent.

  WRITE: 'percentage:', percent, 'VAT:', vat.
复制代码

6、执行程序,测试效果:
当输入条件是US时,执行Y_BADI_CALC_US Implemention
当输入条件是GB时,执行Y_BADI_CALC_GB Implemention
Multiple GB.jpg (22.73 KB, 下载次数: 0)

下载附件

2015-7-3 17:55 上传


我们Debug就可以直观的看到不同条件执行不同Implemention了
---------------------
作者:SAP剑客
来源:CSDN
原文:https://blog.csdn.net/zhongguomao/article/details/76251407
版权声明:本文为博主原创文章,转载请附上博文链接!

posted @ 2019-05-23 19:21  Rainystuday  阅读(236)  评论(0编辑  收藏  举报