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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【整理】BADI的查找和使用

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

BADI的查找和使用

?

一、BADI簡介

BADI是SAP主要的增強的方式之一,目前BADI有兩種:CLassic BADI 和 New BADI。兩種BADI的基本原理差不多,但是具體的實現方式不同,具體的不同主要表現在以下三個方面。

Classic and new BAdIs differ in a number of features that are important for migration:

1. BAdI object

a. With classic BAdIs, a BAdI object is created by calling a factory method, and referenced via a reference variable of the type of the BAdI interface.

b. With new BAdIs, a BAdI object is created via the ABAP statement GET BADIas a handle for the calls of BAdI methods, and referenced via a reference variable of the type of the BAdI. A BAdI object is an instance of an internal BAdI class, which otherwise is invisible to the outside.

2. Passing comparison values for the filter

a. With the classical BAdIs, the filter values are stored in a structure and passed with the call of the BAdI methods.

b. With the new BAdIs, the comparison values for the filters used to search for implementations are passed when the BAdI object is created with the GET BADIstatement.

There is no way of migrating the call of the factory method one-to-one into the ABAP statement, because GET BADI can also return an existing BAdI object, which is not possible with the factory method.

3. Calling BAdI methods

Passing comparison values for the filter

a. A classic BAdI can be called only once and the call positions are registered centrally.

b. With new BAdIs, multiple calls are possible and the call positions are not registered centrally.

?

二、BADI查找

這里以MB31收貨為例,說明如何快速查找BADI。

最快捷方便的當然是可以根據事務代碼快速的找到,這里推薦這樣一個小程序,供大家參考。

REPORT??Z_FIND_EXIT_BADI?NO?STANDARD?PAGE?HEADING. TABLES:TSTC,TADIR,MODSAPT,MODACT,TRDIR,TFDIR,ENLFDIR,SXS_ATTRT,TSTCT. DATA?:?JTAB?LIKE?TADIR?OCCURS?0?WITH?HEADER?LINE. DATA?:?FIELD1(30). DATA?:?V_DEVCLASS?LIKE?TADIR-DEVCLASS. PARAMETERS?:?P_TCODE?LIKE?TSTC-TCODE,P_PGMNA?LIKE?TSTC-PGMNA.DATA?WA_TADIR?TYPE?TADIR.START-OF-SELECTION.IF?NOT?P_TCODE?IS?INITIAL.SELECT?SINGLE?*?FROM?TSTC?WHERE?TCODE?EQ?P_TCODE.ELSEIF?NOT?P_PGMNA?IS?INITIAL.TSTC-PGMNA?=?P_PGMNA.ENDIF.IF?SY-SUBRC?EQ?0.SELECT?SINGLE?*?FROM?TADIRWHERE?PGMID?=?'R3TR'AND?OBJECT?=?'PROG'AND?OBJ_NAME?=?TSTC-PGMNA.MOVE?:?TADIR-DEVCLASS?TO?V_DEVCLASS.IF?SY-SUBRC?NE?0.SELECT?SINGLE?*?FROM?TRDIRWHERE?NAME?=?TSTC-PGMNA.IF?TRDIR-SUBC?EQ?'F'.SELECT?SINGLE?*?FROM?TFDIRWHERE?PNAME?=?TSTC-PGMNA.SELECT?SINGLE?*?FROM?ENLFDIRWHERE?FUNCNAME?=?TFDIR-FUNCNAME.SELECT?SINGLE?*?FROM?TADIRWHERE?PGMID?=?'R3TR'AND?OBJECT?=?'FUGR'AND?OBJ_NAME?EQ?ENLFDIR-AREA.MOVE?:?TADIR-DEVCLASS?TO?V_DEVCLASS.ENDIF.ENDIF.SELECT?*?FROM?TADIR?INTO?TABLE?JTAB?WHERE?PGMID?=?'R3TR'?ANDOBJECT?IN?('SMOD',?'SXSD')?ANDDEVCLASS?=?V_DEVCLASS.SELECT?SINGLE?*?FROM?TSTCT?WHERE?SPRSL?EQ?SY-LANGU?ANDTCODE?EQ?P_TCODE.FORMAT?COLOR?COL_POSITIVE?INTENSIFIED?OFF.WRITE:/(19)?'Transaction?Code?-?',20(20)?P_TCODE,45(50)?TSTCT-TTEXT.SKIP.IF?NOT?JTAB[]?IS?INITIAL.WRITE:/(105)?SY-ULINE.FORMAT?COLOR?COL_HEADING?INTENSIFIED?ON.SORT?JTAB?BY?OBJECT.DATA?:?WF_TXT(60)?????TYPE?C,WF_SMOD????????TYPE?I,WF_BADI????????TYPE?I,WF_OBJECT2(30)?TYPE?C.CLEAR?:?WF_SMOD,?WF_BADI?,?WF_OBJECT2.LOOP?AT?JTAB?INTO?WA_TADIR.AT?FIRST.FORMAT?COLOR?COL_HEADING?INTENSIFIED?ON.WRITE:/1?SY-VLINE,2?'Enhancement/?Business?Add-in',41?SY-VLINE?,42?'Description',105?SY-VLINE.WRITE:/(105)?SY-ULINE.ENDAT.CLEAR?WF_TXT.AT?NEW?OBJECT.IF?WA_TADIR-OBJECT?=?'SMOD'.WF_OBJECT2?=?'Enhancement'?.ELSEIF?WA_TADIR-OBJECT?=?'SXSD'.WF_OBJECT2?=?'?Business?Add-in'.ENDIF.FORMAT?COLOR?COL_GROUP?INTENSIFIED?ON.WRITE:/1?SY-VLINE,2?WF_OBJECT2,105?SY-VLINE.ENDAT.CASE?WA_TADIR-OBJECT.WHEN?'SMOD'.WF_SMOD?=?WF_SMOD?+?1.SELECT?SINGLE?MODTEXT?INTO?WF_TXTFROM?MODSAPTWHERE?SPRSL?=?SY-LANGUAND?NAME?=?WA_TADIR-OBJ_NAME.FORMAT?COLOR?COL_NORMAL?INTENSIFIED?OFF.WHEN?'SXSD'."?FOR?BADISWF_BADI?=?WF_BADI?+?1?.SELECT?SINGLE?TEXT?INTO?WF_TXTFROM?SXS_ATTRTWHERE?SPRSL?=?SY-LANGUAND?EXIT_NAME?=?WA_TADIR-OBJ_NAME.FORMAT?COLOR?COL_NORMAL?INTENSIFIED?ON.ENDCASE.WRITE:/1?SY-VLINE,2?WA_TADIR-OBJ_NAME?HOTSPOT?ON,41?SY-VLINE?,42?WF_TXT,105?SY-VLINE.AT?END?OF?OBJECT.WRITE?:?/(105)?SY-ULINE.ENDAT.ENDLOOP.WRITE:/(105)?SY-ULINE.SKIP.FORMAT?COLOR?COL_TOTAL?INTENSIFIED?ON.WRITE:/?'No.of?Exits:'?,?WF_SMOD.WRITE:/?'No.of?BADis:'?,?WF_BADI.ELSE.FORMAT?COLOR?COL_NEGATIVE?INTENSIFIED?ON.WRITE:/(105)?'No?userexits?or?BADis?exist'.ENDIF.ELSE.FORMAT?COLOR?COL_NEGATIVE?INTENSIFIED?ON.WRITE:/(105)?'Transaction?does?not?exist'.ENDIF.AT?LINE-SELECTION.DATA?:?WF_OBJECT?TYPE?TADIR-OBJECT.CLEAR?WF_OBJECT.GET?CURSOR?FIELD?FIELD1.CHECK?FIELD1(8)?EQ?'WA_TADIR'.READ?TABLE?JTAB?WITH?KEY?OBJ_NAME?=?SY-LISEL+1(20).MOVE?JTAB-OBJECT?TO?WF_OBJECT.CASE?WF_OBJECT.WHEN?'SMOD'.SET?PARAMETER?ID?'MON'?FIELD?SY-LISEL+1(10).CALL?TRANSACTION?'SMOD'?AND?SKIP?FIRST?SCREEN.WHEN?'SXSD'.SET?PARAMETER?ID?'EXN'?FIELD?SY-LISEL+1(20).CALL?TRANSACTION?'SE18'?AND?SKIP?FIRST?SCREEN.ENDCASE.

另外就是去程序代碼里面找,搜索關鍵字“CL_EXITHANDLER”。

假設我們已經找到了想要的BADI:“MB_DOCUMENT_BADI ”,就可以使用事務代碼SE18進去查看,在這里我們可以看到這個BADI對應的接口,接口中定義的相關方法及參數的傳遞等。

在菜單“實施”→“顯示”中我們還可以查看SAP提供的BADI實現的例子。

?

三、BADI實施

至于如何實現,我們需要用到事務代碼SE19。

之后就可以在接口提供的方法內盡情的開花了。

總結

以上是生活随笔為你收集整理的【整理】BADI的查找和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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