SAP学习门户网

您的位置: 主页 > SAP学习文档 > 系统开发(SAP ABAP) >

SAP增强:BADI

来源: 互联网 字体:【 点击次数:

让小伙伴们也看看:

BADI是SAP主要的增强的方式之一,根据不同的阶段,目前BADI有两种:CLassic BADI 和 New BADI。两种BADI的基本原理差不多,但是具体的实现方式不同。

 

1.实现原理

BADI最基本的实现原理即利用接口(interface)的继承。在原程序中调用接口的方法,接口的方法没有代码,实现BADI时创建一个继承该接口的类,在类中实现方法。

但CLassic BADI 和 New BADI在实现有差别:

1.1.CLassic BADI

以BADI:IMRC_STATUS_CHECK为例,以下为SAP源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
DATA l_badi_imrc_status_check_ref TYPE REF TO if_ex_imrc_status_check.
DATA l_badi_imrc_status_check_act(1) TYPE c.
CONSTANTS l_badi_name TYPE exit_def VALUE 'IMRC_STATUS_CHECK'.
 
CALL METHOD cl_exithandler=>get_instance
      EXPORTING
        exit_name                     = l_badi_name
        null_instance_accepted        = 'X'
      IMPORTING
        act_imp_existing              = l_badi_imrc_status_check_act
      CHANGING
        instance                      = l_badi_imrc_status_check_ref
      EXCEPTIONS
        no_reference                  = 1
        no_interface_reference        = 2
        no_exit_interface             = 3
        class_not_implement_interface = 4
        single_exit_multiply_active   = 5
        cast_error                    = 6
        exit_not_existing             = 7
        data_incons_in_exit_managem   = 8
        OTHERS                        = 9.
 
IF l_badi_imrc_status_check_act = 'X'.
  CALL METHOD l_badi_imrc_status_check_ref->check_imrg_status
        EXPORTING
          is_imrg            = imrg
        EXCEPTIONS
          change_imrg_denied = 1.
ENDIF.

其中:if_ex_imrc_status_check是BADI中定义的接口名。

1.2.New BADI

以BADI:MP_TRANSFER_RELATION为例,以下为SAP源代码:

1
2
3
4
5
6
7
8
9
10
DATA badi_propose_relation TYPE REF TO mp_transfer_relation.
 
GET BADI badi_propose_relation.
IF badi_propose_relation IS BOUND.
     CALL BADI badi_propose_relation->determine
          EXPORTING
              it_transfer_relation = lt_propose_temp
           IMPORTING
              et_transfer_relation = lt_propose_new.
ENDIF.

其中:mp_transfer_relation不是接口的名字,而直接是BADI的名字。

1.3.实现原理的应用

了解了BADI的源代码实现方式之后,就可以通过查找源代码的方式来查找BADI,或者在程序中根据语句(如CALL METHOD 、GET BADI 、CALL BADI )设置断点来查找一个业务操作具有的BADI.

2.CLassic BADI 和 New BADI的前台比较

通过SE18可以查看BADI:

CLassic BADI:

image

New BADI:

 image

可以看到两种BADI的显示差别很大。实际上New BADI是属于SAP新发布的Enhancement Framework的,它的上层有一个Enhancement Spot的容器,一个Enhancement Spot下可以有多个New BADI。

Enhancement Spot是SAP新的Enhancement Framework的主要概念,其用于组织两种主要的增强技术,一种是BADI,另一种是直接的源代码增强。源代码增强在后续文章中介绍。

(作者:Helena)
文章Tags: SAP sap系统 SAP BAPI增强
除非注明,SAP学习门户网文章均为原创,网站不对内容的真实性作任何评价,因网站内容造成的任何损失均与网站无关,转载请以链接形式标明本文地址。
本文地址:http://www.sap6.com/learn/abap/073502162016/4115.html

参与评论
    评论
关于我们 - 联系我们 - 广告服务 - 网站地图 - 版权声明 - 我要投稿 - 网站tag -