寂寞大萝卜 发表于 2015-9-19 10:09:35

SAP BADI应用

SAP BADI应用
  1.定义BADI
         1) T-Code:SE18   Business Add-In Define.
  2) 输入要创建的BADI的名字,点击"Create"。
  3) 输入BADI的描述性文本,在"Interface"选项卡上输入接口的名字,也可以采用SAP建议的接口的名字。同时,BADI类也      会被创建。
  例如:对于BADI "ZTEST",SAP会建议"ZIF_EX_TEST"作为接口的名字,"ZCL_EX_TEST"作为类的名字。
  4) 保存BADI。
  5) 双击接口的名字,会跳转到Class Builder界面,在这里你可以定义接口的方法。
  6) 保存并激活接口。
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://n3kptq.bay.livefilestore.com/y1mZlh87puXIh1OKKEuWgIQWvIUIPchFQYTPMQKk2BdSRpbv-PknVhgvkN3x6jB9kYpqBRB-xPyhW531yNpVQKrXukL_IIMpo_wUR4mfLHOHBu1PFAAZUFOROyGG2eSRo_Hcn4dkF6fVsA/35962_080912155840.png
  2.实现BADI
         1) T-Code:SE19   Business Add-In Implementation
         2) 输入BADI实现的名字,点击"Create"。
         3) 输入BADI定义的名字。
         4) 输入实现的描述性文本,在"Interface"选项卡上输入实现类的名字。可以采用SAP建议的名字。
  例如:"ZIMPTEST",SAP会建议"ZCL_IM_IMPTEST"。
  5) 保存实现。
  6) 双击某一方法名会跳转到Class Builder界面,在这里你可以添加代码来重定义接口方法。
  7) 激活实现。
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://n3kptq.bay.livefilestore.com/y1mf0yLgSiPvWLMafBLMk9gRqICQoqL9ucK8J4SehcpfXinhSZ230vA-ZBKVBwKCtJFcbW73Yszu22dNB4gk9AB-UJ6oPn05O_rMsxZ5LCW9j_CBUuk3pUR3-Ehuy4PHwxiJa9BEh-1R-g/35962_080912155904.png
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://n3kptq.bay.livefilestore.com/y1mfFmF__XLkc943fXHVIijTs7G7Ld888lrkn3zMdN-BGKPPKxZ9J-xFO87qR9StS6kINcY4MLVP7b4xpLULjYdhN2gTZbHFWKvu-kjCoQUUmFrLd7vWFn_LVHXJjDYvuxq82eBI29K0OA/35962_080912155914.png
  3. 程序中调用BADI
  1) 先用类型参照引用出要调用的BADI
      2) 实例化BADI
      3) 实例化后就可以任意调用BADI 中的方法了。
  REPORTZZW_BAPI_01                                                 .
  data exit type ref to ZIF_EX_ZW_BD_TEST.
  call method cl_exithandler=>get_instance
   changing
      instance = exit.
  call method exit->Z_ZW_01.
  ==》
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.
页: [1]
查看完整版本: SAP BADI应用