【整理】BADI的查找和使用

【整理】BADI的查找和使用BADI 的查找和使用一 BADI 简介 BADI 是 SAP 主要的增强的方式之一 目前 BADI 有两种 CLassicBADI 和 NewBADI

大家好,欢迎来到IT知识分享网。

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 TADIR     WHERE PGMID = 'R3TR'      AND OBJECT = 'PROG'      AND OBJ_NAME = TSTC-PGMNA.     MOVE : TADIR-DEVCLASS TO V_DEVCLASS.     IF SY-SUBRC NE 0.       SELECT SINGLE * FROM TRDIR        WHERE NAME = TSTC-PGMNA.       IF TRDIR-SUBC EQ 'F'.         SELECT SINGLE * FROM TFDIR          WHERE PNAME = TSTC-PGMNA.         SELECT SINGLE * FROM ENLFDIR          WHERE FUNCNAME = TFDIR-FUNCNAME.         SELECT SINGLE * FROM TADIR          WHERE 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' AND      OBJECT IN ('SMOD', 'SXSD') AND      DEVCLASS = V_DEVCLASS.     SELECT SINGLE * FROM TSTCT WHERE SPRSL EQ SY-LANGU AND      TCODE 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_TXT              FROM MODSAPT              WHERE SPRSL = SY-LANGU               AND NAME = WA_TADIR-OBJ_NAME.             FORMAT COLOR COL_NORMAL INTENSIFIED OFF.           WHEN 'SXSD'.             " FOR BADIS             WF_BADI = WF_BADI + 1 .             SELECT SINGLE TEXT INTO WF_TXT              FROM SXS_ATTRT              WHERE SPRSL = SY-LANGU               AND 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.

【整理】BADI的查找和使用

【整理】BADI的查找和使用

另外就是去程序代码里面找,搜索关键字“CL_EXITHANDLER”。

【整理】BADI的查找和使用

假设我们已经找到了想要的BADI:“MB_DOCUMENT_BADI ”,就可以使用事务代码SE18进去查看,在这里我们可以看到这个BADI对应的接口,接口中定义的相关方法及参数的传递等。

【整理】BADI的查找和使用

【整理】BADI的查找和使用

在菜单“实施”→“显示”中我们还可以查看SAP提供的BADI实现的例子。

【整理】BADI的查找和使用

 

三、BADI实施

至于如何实现,我们需要用到事务代码SE19。

【整理】BADI的查找和使用

【整理】BADI的查找和使用

【整理】BADI的查找和使用

之后就可以在接口提供的方法内尽情的开花了。

【整理】BADI的查找和使用

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/138261.html

(0)
上一篇 2025-06-14 14:10
下一篇 2025-06-14 14:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信