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.

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