日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ABAP增强】基于BADI的增强

發布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ABAP增强】基于BADI的增强 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? BADI的全稱是Business Add-in,它的主要技術是基于ABAP的對象來實現增強。SAP中BADI的維護事務代碼是SE18和SE19,SE18主要是創建及維護BADI對象,而SE19用于維護BADI的實例,即如何來實現BADI對象的功能。

? ? ? ? SAP的BADI因系統版本的差別可能會有不同,R/3中的BADI被稱為Classic BADI,而到了SAP Netweaver中ABAP被升級到了7.0版本,新增了BADI Enhancement Spot對象,Classic BADI 的功能被保留,但是Classic BADI所維護的對象也可以移植到新的BADI中進行操作。SAP的BADI不但可以實現對標準功能系統的增強,也可以直接在自定義程序中進行調用。

1、自定義BADI對象的創建及維護實例

下面就開始介紹如何自定義一個BADI對象,并實現在ABAP程序中對該對象的調用,通過實例可以初步的了解BADI維護工具的具體操作及相關屬性。

<1>輸入事務代碼SE18,進入到BADI Builder的維護界面,選擇“增強點”(Enhancement Spot)的單選按鈕,在輸入欄中輸入自定義的對象名稱,這里我們以“ZBADI_TEST001”為例,如下圖所示:

<2>單據工具欄中的“創建”按鈕,系統將會彈出“Create Enhancement Spot”對話框,需要維護對象名稱及描述,具體如下圖所示:

<3>單擊“確認”按鈕,保存Enhancement Spot對象,進入到Enhancement Spot對象屬性維護頁面,選擇第四個頁簽“增強點元素定義”,如下圖所示:

<4>單擊“創建”的空白按鈕,系統將會彈出“創建BADI定義”對話框,要求維護自定義BADI的名稱及描述,這里我們輸入“ZBADI_TEST001”,如下圖:

<5>單擊“確定”按鈕,可以看到操作頁面的列表中增加了BADI定義的對象,如下圖所示:

<6>單擊菜單中的“接口”節點,在屏幕的右邊將會出現接口定義的維護字段,在接口字段輸入自定義接口名稱“ZBADI_TEST_F01”,如下圖所示:

<7>將光標定位在接口字段并按下回車鍵,系統提示“類/接口不存在,是否要創建對象?”,如下圖所示:

<8>單擊“是”按鈕將保存該接口對象,接下來將會進入類別制作器維護頁面。在該頁面的“方法”字段中維護自定義方法,這里定義名稱為“PRINT”,如下圖所示:

<9>單擊“類別制作器”工具欄中的“參數”按鈕,進入所選方法的參數維護頁面。為“PRINT”方法分別定義一個輸入和一個輸出參數,參數名稱分別為INPUT和OUTPUT,具體如下圖所示:

<10>保存并激活上述操作,返回BADI定義的頁面,在BADI對象列表中選擇第二個節點“實施”,在節點處單擊鼠標右鍵,將會出現“創建BADI實施”的菜單選項,如下圖所示:

<11>將會彈出“Create Enhancement Implementation”對話框,這里新建Enhancement實例名稱為“ZBADI_TEST001_IMP”,具體如下圖所示:

這里所創建的“Enhancement Implementation”也可以在SE19中查看及維護。

<12>“Create Enhancement Implementation”輸入完畢點“確認”之后,系統會彈出“創建BADI實施”的對話框,這里維護BADI的實施名稱為“ZBADI_TEST001”,實施類的名稱為“ZBADI_TEST001_CLASS”,如下圖所示:

<13>確認后進入“Enhancement Implementation”維護界面,如圖所示:

<14>雙擊實施類所對應的方法“ZBADI_TEST_F01~PRINT”,系統將會提示是否創建該實例,單擊“確認”按鈕后會創建一個新的實例,該方法所對應的實例維護界面如下圖所示:

本例在創建接口時,為該方法建立了INPUT和OUTPUT兩個參數,在程序中可以直接調用這兩個參數,相關的代碼如下:

METHOD ZBADI_TEST_F01~PRINT.CONCATENATE '輸入:' INPUT INTO OUTPUT.ENDMETHOD.

<15>所創建的BADI還可以在ABAP程序中直接調用,如下面所示:

REPORT ZTEST_BADI_001.DATA : BADI1 TYPE REF TO ZBADI_TEST_F01, "參照接口對象BADI2 TYPE REF TO ZBADI_TEST001_CLASS."參照實施類DATA : INSTR TYPE STRING,OUTSTR TYPE STRING.START-OF-SELECTION.CREATE OBJECT BADI2. "創建一個類的實例BADI1 = BADI2. "對實例賦值INSTR = 'Test'.CALL METHOD BADI1->PRINT "調用BADI所生成的類方法EXPORTINGINPUT = INSTRIMPORTINGOUTPUT = OUTSTR.WRITE : OUTSTR.

?

2、如何查找系統中的BADI

SAP中的源碼,相關BADI增強都是通過方法“CL_EXITHANDLER=>GET INSTANCE”來調用的,以客戶維護事務代碼VD02為例,作相關步驟的講解:

<1>在VD02的操作頁面中執行主菜單中的“系統”-“狀態”命令來查看該事務代碼的源碼程序,可以發現VD02的程序名稱為“SAPMF02D”。

<2>進入到程序“SAPMF02D”的代碼查看頁面,單擊工具欄中的“查找”按鈕,輸入系統調用BADI的方法的前幾個字母“CL_EXIT”,如圖所示:

<3>單擊“確定”按鈕后,顯示查找的結果:

以上述結果中的某段為例,比如BADI對象為EXIT_NAME的參數“CUSTOMER_ADD_DATA”。

* Instanz setzenCALL METHOD CL_EXITHANDLER=>GET_INSTANCEexporting " \TP 563352exit_name = 'CUSTOMER_ADD_DATA' " \TP 563352null_instance_accepted = 'X' " \TP 563352CHANGINGINSTANCE = G_ADDITIONAL_DATA.

還有些代碼是直接調用BADI中的類,該類在方法取用時為一個參數的形式,如下圖所示:

遇到這類代碼,可以直接雙擊查找的訂單,查看源碼所在的位置,然后雙擊類關聯的參數,將可以看到參數的定義代碼,所查找的類名稱通常是以“CL_EX_”作為開頭的,BADI名則截取后面的部分。以本例在銷售訂單中創建事務代碼VA01的關聯程序中找到了BADI類:if_ex_oij_el_tsw_details,則其關聯的BADI對象名稱為“oij_el_tsw_details”。

STATICS: l_exit TYPE REF TO if_ex_oij_el_tsw_details.IF l_exit IS INITIAL.CALL METHOD cl_exithandler=>get_instanceCHANGINGinstance = l_exit.ENDIF.

所找到的BADI對象可以通過事務代碼SE18來查看,以BADI:CUSTOMER_ADD_DATA為例,可以看到其對應的接口類為IF_EX_CUSTOMER_ADD_DATA,如下圖所示:

除了通過上面的方法外,也可以通過SE80來查看增強對象,SAP的所有程序都被分配到了一個開發類,例如XD02對應的開發類就是VS,在SE80查看該開發類調用的增強,如下圖所示:

3、通過BADI實現客戶主數據控制功能的建立

以上面找到的增強對象“CUSTOMER_ADD_DATA”為例,該BADI是在XD02中找到的,關聯的業務肯定是與客戶主數據的創建和維護有關系,增強實現具體如下。

<1>輸入事務代碼SE19,輸入BADI對象名稱“CUSTOMER_ADD_DATA”,如下圖所示:

<2>點擊“創建實施”按鈕,彈出對話框,維護BADI定義的Enhancement Implementation的名稱和描述,這里定義為“ZCUSTOMER_ADD_DATA”。

<3>單擊“確認”之后需要進一步維護新建BADI對象的實施對象名稱及實施類,本例中定義BADI的實施對象名稱為“ZCUSTOMER_ADD_DATA”,實施類名稱為“ZCL_IM_ZCUSTOMER_ADD_DATA”,然后在下拉菜單中選擇該BADI的實施類為“CUSTOMER_ADD_DATA”。

<4>單擊“確定”按鈕,進入BADI實施對象的維護頁面,新建的實施類繼承了原有BADI對象所對應的實施類的所有方法,如下圖所示:


<5>新建的BADI實施類繼承了所有的方法,雙擊列表中某一個方法,將進入其ABAP編輯頁面,可以由用戶編寫自定義的代碼。雙擊實施類或者通過事務代碼SE24可以查看該類所有方法的接口參數信息。

以方法“CHECK_ALL_DATA”為例,從名稱上看可以獲悉該方法應該適用于對客戶數據的檢查,查看接口參數,幾乎包括了客戶主數據維護的所有信息,如下圖所示:

下面舉例說明,在客戶保存的時候,檢查該客戶的地址信息是否已經維護,當地址信息為空時,提示不允許保存。客戶對應的地址信息數據存儲在物理表KNA1-STRAS字段中,可以推斷其對應的接口參數為S_KNA1-STRAS,雙擊“CHECK_ALL_DATA”方法,進入到ABAP維護界面,如下圖所示:

維護代碼:

METHOD IF_EX_CUSTOMER_ADD_DATA~CHECK_ALL_DATA.IF S_KNA1-STRAS IS INITIAL.MESSAGE E001(00) WITH '客戶的地址信息不可以為空!'.ENDIF.ENDMETHOD.

保存并激活增強代碼即可。

?

總結

以上是生活随笔為你收集整理的【ABAP增强】基于BADI的增强的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。