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)进行查询和搜索。

    se24 找到对应的类l_exithandler,在cl_exithandler=>get_instance 里面case 设断点

    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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章