1. 程式人生 > >如何從SAP中查詢BADI

如何從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控制跨月CancelMETHOD 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 cancelif 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.

5、補充7.00版後badi的幾個處理變化

  • 以前的CL_EXITHANDLER=>GET_PROG_AND_DYNP_FOR_SUBSCR被CL_ENH_BADI_RUNTIME_FUNCTIONS=>GET_PROG_AND_DYNP_FOR_SUBSCR 代替.
  •    
  • 以前的 PUT_DATA_TO_SCREEN和GET_DATA_FROM_SCREEN不在需要。使用者可以建立自己的資料傳輸函式,通過CALL BADI來呼叫.
  •    
  •   使用者也不需要呼叫CL_EXITHANDLER=>SET_INSTANCE_FOR_SUBSCREENS 和 CL_EXITHANDLER=>GET_INSTANCE_FOR_SUBSCREENS函式
    . These methods are now unnecessary as they only place the BAdI reference in a temporary storage.SET_INSTANCE_FOR_SUBSCREENS is no longer necessary.GET_INSTANCE_FOR_SUBSCREENS can, if necessary, be replaced by GET BADI.