二维码

[三代] 为什么一个BADI中实施多个Implementation

Twilight发表于 2015-07-03 18:01Twilight 最后回复于 2015-07-03 18:01 [复制链接] 3847 0

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

我们接着上篇来继续讲述:Enhancement Spot中BADI的实现

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

2、在BADI:Y_BADI_CALC_VAT1中再实施一个Implementation:Y_BADI_CALC_VAT_GB
Multiple 1.jpg
部署Method(Y_CL_CAL_VAT_GB)代码:Y_IF_CALC_VAT~GET_VAT
  1.   METHOD y_if_calc_vat~get_vat.
  2.     DATA: percent TYPE p VALUE 8 .
  3.     ex_amount_vat = im_amount * percent / 100 .
  4.     ex_percent_vat = percent .
  5.   ENDMETHOD.
复制代码

3、在BADI:Y_BADI_CALC_VAT1中新建定义一个Filter
Multiple 2.jpg

4、分别在BADI的两个Implemention中设置Filter条件
Multiple 3.jpg
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修改调用程序的代码:
  1. DATA: handle  TYPE REF TO y_badi_calc_vat1,
  2.       sum     TYPE p,
  3.       vat     TYPE p,
  4.       percent TYPE p.

  5. PARAMETERS: ctry(2) TYPE c.

  6. START-OF-SELECTION.
  7.   sum = 50.

  8. *获取BADI对象:Y_BADI_CALC_VAT1
  9.   GET BADI handle FILTERS country = ctry.
  10. *调用BADI对象Y_BADI_CALC_VAT1的方法get_vat
  11.   CALL BADI handle->get_vat
  12.     EXPORTING
  13.       im_amount      = sum
  14.     CHANGING
  15.       ex_amount_vat  = vat
  16.       ex_percent_vat = percent.

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

6、执行程序,测试效果:
当输入条件是US时,执行Y_BADI_CALC_US Implemention输出结果如下:
Multiple US.jpg
当输入条件是GB时,执行Y_BADI_CALC_GB Implemention输出结果如下:
Multiple GB.jpg
我们Debug就可以直观的看到不同条件执行不同Implemention了
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表