SAP 最全的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 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.

 

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

 

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

 

 

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

 

三、BADI实施

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

 

 

 

之后就可以在接口提供的方法里加工代码了。

 

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 'b'sap abap bapi、badi、区别' 的意思是什么? 这个问题的意思是要求解释 "bapi"、"badi" 和 "abap" 之间的区别。"abap" 是德国软件公司 SAP 开发的编程语言,用于开发 SAP 系统中的应用程序。"bapi" (Business Application Programming Interface) 是 SAP 系统中的一个功能模块,用于连接不同的 SAP 应用程序和传递数据。而 "badi" (Business Add-Ins) 则是一种钩子机制,允许在 SAP 系统中插入自定义代码,以增强系统的功能和灵活性。所以,虽然 "bapi" 和 "badi" 都是 SAP 系统中的编程接口,但它们的作用和实现方式是不同的。 ### 回答2: SAP ABAP是SAP的编程语言,是一种面向对象的编程语言,用于开发SAP系统的应用程序。而BAPI和BADI则是SAP ABAP的两种不同的编程方法。 BAPI是Business Application Programming Interface的缩写,是一组已定义的函数模块,用于与SAP系统进行交互。BAPI可以用来调用SAP系统中的标准功能模块,以实现对标准SAP应用程序的访问和修改,还可以通过自定义函数模块进行个性化定制。BAPI旨在使不同的系统和应用程序能够无缝地进行集成,使它们更加灵活和可扩展。 BADI是Business Add-ins的缩写,是一种钩子(hook)技术,用于扩展SAP系统的标准功能。BADI提供了一种平台来开发、实现和操作可插入业务功能,使用户可以轻松地定制和扩展SAP应用程序,而且不会影响到标准SAP系统。用户可以在不同的SAP系统中使用同一种BADI实现,这使得BADI具有极大的灵活性和可重用性。 总体来说,BAPI是SAP系统的开放接口,用于与外部系统集成和定制,而BADI则是在SAP系统中增加附加业务逻辑的一种方式。虽然它们都是SAP ABAP编程中的重要技术,但它们的应用场景和目的有所不同。 ### 回答3: SAP ABAP BAPI和BADISAP系统中两种不同的编程方式。BAPI(Business Application Programming Interface)是SAP系统中一种标准的用于开发对外接口的编程方式,而BADI(Business Add-In)是SAP系统中一种基于面向对象的扩展点的编程方式。 BAPI是一种标准化编程接口,它允许开发人员将SAP系统中的业务逻辑封装成可重复使用的程序集,这些程序集可以被任何其他系统或应用程序使用。使用BAPI开发的程序可以被称为SAP的Web服务或API,它们可以通过网络调用,实现不同系统之间的数据传输和业务逻辑交互。BAPI通过一些标准提供的接口,如RFC(远程函数调用)和IDoc(中间文档)来实现与外部应用程序的数据交互。 与之不同的是,BADI是在SAP应用程序内部定义的一个特定点,用于扩展标准SAP业务逻辑。BADI是基于面向对象编程的原则,允许开发人员在SAP业务流程中插入自定义逻辑。BADI具有良好的可维护性和灵活性,因此比其他的扩展点如User Exit更加强大。BADI通常为开发人员提供了一些固定的入口点,使其可以在SAP系统的不同流程中添加自定义逻辑以满足业务需求。BADI可以在程序运行时被动态调用,因此可以大大增加程序的可扩展性。 需要注意的是,虽然BAPI和BADI都是SAP系统中的编程方式,但是它们有着不同的应用前提和场景。BAPI是为了将SAP系统扩展到其他系统或平台而开发的,其应用场景一般限制于外部应用程序与SAP交互的数据传输;而BADI则主要用于对SAP系统内的特定点进行业务逻辑扩展,其应用场景则更加广泛。在实际开发中,开发人员需要根据具体应用场景的需求进行选择和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值