什么是BADI,如何从SAP中查找BADI?

Business Add-Ins are a new SAP enhancement technique based on ABAP Objects. They can be inserted into the SAP System to accommodate user requirements too specific to be included in the standard delivery. Since specific industries often require special functions, SAP allows you to predefine these points in your software.

 

SAP预定义了一些Interface,客户可以自己定义实现Interface的Class进行客户化,在标准程序中会使用调用客户自定义Class的 Instance,在获取Instance的过程使用了工厂模式,因此获取过程对用户是未知的。不过BADI也有一些局限性,就是有哪些 Interface是固定死的,有的时候会发现需要Mix客户化代码的时候找不到Interface,什么时候SAP的OO里面直接支持AOP就好了。

如何从SAP中查找BADI

BADI作为SAP的第三代用户出口,他的应用也越来越广泛,但如何找到合适的badi是许多abap程序员的困惑。我这里就介绍一下我个人的应用的经验,供大家参考。

1、badi对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中(参见SECE包);

2、sap程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例;其实get_instance就是对上述几个表和他们的视图(V_EXT_IMP 和 V_EXT_ACT)进行查询和搜索。

3、基于这个机理,我查用ST05来监控一个TCODE来跟踪,然后选择查找有关上述几个表和视图的操作,就可获得相关BADI。

 4、se18 查找接口,se19 实现接口就可以实现用户增强。
示例:用LE_SHP_DELIVERY_PROC控制跨月Cancel

METHOD if_ex_le_shp_delivery_proc~change_delivery_header .
 DATA : thismonth(2) TYPE c.
 DATA : wa_likp TYPE LINE OF shp_likp_t.
 DATA : wa_log TYPE LINE OF shp_badi_error_log_t.
 CLEAR ct_log[],thismonth.
 thismonth = sy-datum+4(2). "----->這一個月的月份
 LOOP AT it_xlikp INTO wa_likp.
   CHECK is_v50agl-warenausg_storno ='X'."--->代表作GI cancel
   IF wa_likp-wadat_ist+4(2) < thismonth.
     wa_log-vbeln = cs_likp-vbeln.
     wa_log-msgty = 'E'. "錯誤訊息
     wa_log-msgid = 'ZDN_ERROR'. "這一個class要自己建
     wa_log-msgno = '001'.
     APPEND wa_log TO ct_log. "Error log寫入
   ENDIF.
 ENDLOOP.
ENDMETHOD. "IF_EX_LE_SHP_DELIVERY_PROC~CHANGE_DELIVERY_HEADER

TCODE:

SE18
SE19

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值