SAP ABAP/4 BADI 入门篇

SAP ABAP增强 BADI的增强全解析 遇到这类代码,可以直接双击查找的订单,查看源码所在的位置,然后双击类关联的参数,将可以看到参数的定义代码,所查找的类名称通常是以“CL_EX_”作为开头的,BADI名则截取后面的部分。单击“确认”之后需要进一步维护新建BADI对象的实施对象名称及实施类,本例中定义BADI的实施对象名称为“ZCUSTOMER_ADD_DATA”,实施类名称为“ZCL_IM_ZCUSTOMER_ADD_DATA”,然后在下拉菜单中选择该BADI的实施类为“CUSTOMER_ADD_DATA”。 阅读详情

1.1      BADIs

BADI Name

/KJEPS/BADI2

Description

BADI for change visibility of EPS fields

Dev. Class

/KJEPS/JD

1.1.1     Method  SET_SCREEN_COND_VBAP

Overview:

Method Name

SET_SCREEN_COND_VBAP

Description

Change field visibility for Sales order item screen

Function

Called from PBO module of SAPMV45A 8450 and return EX_SCREEN_VISIBLE

Interface:

Importing Parameters

Field Name

Reference

Description

Mandatory

IN_VBAK

VBAK

Sales Order Header

X

IN_VBAP

VBAP

Processing Sales Order Item

 

 

 

 

 

IN_TRTYP

TRTYP

Transaction type

 

 

 

 

 

IN_XVBAP

VA_VBAPVB_T

Document Structure for XVBAP/YVBAP (Sales order item)

 

 

 

 

 

IN_XVBEP

VA_VBEPVB_T

Structure of Document for XVBEP/YVBEP (schedule line)

 

 

 

 

 

IN_XVBKD

VA_VBKDVB_T

Reference structure for XVBKD/YVBKD (business data)

 

 

 

 

 

IN_XVBPA

VA_VBPAVB_T

(partner function)

 

 

 

 

 

 

 

 

 

 

Changing Parameters

Field Name

Reference

Description

Mandatory

EX_SCREEN_VISIBLE

C

‘X’ = EPS screen is visible

Space = EPS screen is not visible

 

 

 

 

 

 

以上一个是BADI的定义, 那么什么是BADI, 说土点就是现在你定义个接口类,但是这个接口

类有一些方法,但是这些方法都是空的,这些方法也有都自己的IMPORTING ,EXPORTING,

CHANING参数.但是这些方法没有被实现, 而你却还要在自己当前写的程序中去调用这个

没有被实现的方法, 这里就出现了一堆问题,

 

 

 

 

 

为什么要调用它?

为什么这个BADI是空的?

为什么要做这样的一个空的东西?

下面将回答这些问题, 因为比较偷懒所以没找到比较好的例子, 以下是一个SAP的业务场景:

      SALES ORDERITEM数据行的DETAIL信息, SAP系统给客户留了一个BADI, 这个

BADI被系统的标准程序调用过, 显示一个SUBSCREEN, 里面包含一些信息, 如下:

 

 

如果某个用户实施了SAP的产品,不希望出现这个SUBSCREEN的话, 客户想把这个屏幕给隐

藏掉, 所以给客户预留了一个BADIDEFINITION. 也就是最上面的那个表.

使用SE18可以看到这个定义.

 

这三个方法在标准的程序中是怎么被调用的.

以下是系统标准程序
************************************************************************************

*Define class load

class cl_exithandler definition load.

*Define the Sales Order Control Table instance

  data: lds_soctrl            type /kjeps/soctrl,

        ldf_screen_visible(1) type C value space,

        ldf_pre_existing      type c,

        exit                  type ref to /KJEPS/IF_EX_BADI2,

        ldf_badi_name         type exit_def value '/KJEPS/BADI2'.

*Chck the BADI whether was implemented.
*
检查BADI是否被用户给实现过了,传入BADI的定义名字和接口类名

  CALL METHOD CL_EXITHANDLER=>GET_INSTANCE

    EXPORTING

      EXIT_NAME                     = ldf_badi_name

      NULL_INSTANCE_ACCEPTED        = space

    IMPORTING

      ACT_IMP_EXISTING              = ldf_pre_existing

    CHANGING

      INSTANCE                      = exit.

*IF the BADI has implemented, and then call corresponding method.

*如果这个BADI被用户实现了,下面的这个参数会等于’X’

*如果实现了,就调用客户实现的方法.

  if ldf_pre_existing = gcf_on.

     CALL METHOD EXIT->SET_SCREEN_COND_VBAP

      EXPORTING

         IN_VBAK           = vbak

         IN_VBAP           = vbap

         IN_TRTYP          = t180-trtyp

         IN_XVBAP          = xvbap[]

         IN_XVBEP          = xvbep[]

         IN_XVBKD          = xvbkd[]

         IN_XVBPA          = xvbpa[]

      CHANGING

         EX_SCREEN_VISIBLE = ldf_screen_visible.

  endif.

   if ldf_screen_visible = space.

     loop at screen.

       screen-active = '0'.

       modify screen.

     endloop.

   endif.

************************************************************************************

 

 

 

那么这里客户如何是实现这个BADIDEFINITION,使用SE19

    

    

其中的SET_SCREEN_COND_VBAP被实现了,SUBSCREEN的显示的一个变量清除了.

这就表示,用户不想看见那个显示数据的SUBSCREEN, 然后看上面的系统中的程序. 执行到

这里的时候会判断这个变量是否被用户的程序给修改了,如果修改了就不显示SUBSCREEN.

*******************************************************************
   if ldf_screen_visible = space.

     loop at screen.

       screen-active = '0'.

       modify screen.

     endloop.

   endif.
*******************************************************************

~~

SAP 最全的BADI的查找方法总结 BADISAP主要的增强的方式之一,目前BADI有两种:CLassic BADI 和 New BADI。两种BADI的基本原理差不多,但是具体的实现方式不同,具体的不同主要表现在以下三个方面。假设我们已经找到了想要的BADI:“MB_DOCUMENT_BADI ”,就可以使用事务代码SE18进去查看,在这里我们可以看到这个BADI对应的接口,接口中定义的相关方法及参数的传递等。在菜单“实施”→“显示”中我们还可以查看SAP提供的BADI实现的例子。这里以MB31收货为例,说明如何快速查找BADI 阅读详情

相关推荐

SAP 实施 BADI 增强——以采购申请增强为例

以采购申请增强为例做一个 SAP BADI 增强

qq_41757790的博客 4993

SAP第三代增强——BADI解读

SAP BADI概念讲解

BlueTeethBoy的博客 4358

SAP ABAP之第一,二,三代出口类型BADI实现 概念解释

BADI是用户的第三代出口类型,我们来看看其具体的是如何实现的。 一,用户出口的类型 1,第一代 sap提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标准代码。示例:USEREXIT.. in SAPMV45A 2,第二代 sap提供的是CUSTOMER-FUNCTION,它是通过SMOD和CMOD完成实现。 3,第三代 s

forever_crazy的专栏 5840

SAP BAdI 深度解读

BAdISAP在标准程序中,为客户自定义逻辑所预留的接口(属于第三代增强),在技术本质上是一个interface,通过实现类的向上继承,完成用户逻辑的调用。 操作BAdI的事务代码: SE18:定义BAdI, 查看BAdI的相关属性。 SE19: 实现BAdI,查看BAdI的相关实现。 通常所说的BAdI有两种类型, - Classic BAdI (其在运行时进行实例化), 也称old ...

SAP领域技术博客 1万+

SAP ABAP/4 BADI 入门篇 (转)

转自:http://jjwenhuo.itpub.net/post/16092/115296jjwenhuo的博客  SAP ABAP/4 BADI 入门篇 =========================================================== 作者: jjwenhuo(http://jjwenhuo.itpub.net)发表于:20

993

ABAP增强】基于BADI的增强

BADI的全称是Business Add-in,它的主要技术是基于ABAP的对象来实现增强。SAPBADI的维护事务代码是SE18和SE19,SE18主要是创建及维护BADI对象,而SE19用于维护BADI的实例,即如何来实现BADI对象的功能。 SAPBADI因系统版本的差别可能会有不同,R/3中的BADI被称为Classic BADI,而到了SAP Net...

少年休闲海 2万+

SAP-ABAP开发-第三代增强示例(BADI

在程序中写BADI增强主要方法步骤①数据库表:存储数据,以行项目为主键②一个内表:用来存储界面中的数据③对应的结构体④3个函数:PUT DATA 从内表取数 传给函数;GET DATA 从函数获取 可以存储到内表;SAVE DATA 出内表存储到数据库表。

小羔羊的博客 4663

SAP ABAP(增强技术) BADI自己的一些了解,以及用法

除了BADI,在实际的项目开发中还可能用到其它的增强技术,如出口技术——User exit(用户出口)、Customer exit(客户出口)等,而 BADI技术,即业务附加(Business Add-ins)相当于面向对象的出口技术,所能完成的功能也类似

HJackyua的博客 9346

SAP第三代增强:基于类的增强(BADI

BADI维护是通过SE18、SE19事务来来维护的。SE18用于创建及维护BADI对象;SE19用于维护BADI的实例。 BADI的查找方法: 1、主程序都会调用cl_exitHandler=>get_instance(这只是经典BADI是这样来调用的,如果是新式的BADI,则调用为GETBADIhandle-BADI定义名、CALLBADIhandle->method)来...

SAP阿狸 1万+

SAP三代增强BADI

1、基于SAP源代码的增强:对SAP所预留的空的子过程进行编码,用户可以编辑此过程,并在这个子过程中添加自定义的代码,以增加SAP标准程序的控制功能。2、基于函数的增强:SAP为此类出口提供了相应的函数,依据函数结构指定的传入/传出参数,程序执行时,调用该函数并检查相应的代码。3、SAP BADI:使用面向对象的方式实现增强。什么是BADI?1、BADI(business add-ins)是SAP在R/3 release 4.6A后增加的增强技术。

MIN______的博客 1354

SAP-ABAPSAP第二代增强之BADI详解

第二代增强(BADI)是 SAP 扩展标准功能的核心技术,适用于需要高灵活性和多实例支持的场景。对于复杂需求,可进一步探索第三代增强技术(如。是 SAP 第二代增强的核心技术,基于面向对象(ABAP OO)的设计理念。它允许开发者在不修改 SAP 标准代码的情况下,通过实现预定义的接口(Interface)来扩展或修改标准业务逻辑。SAP 的第二代增强(User Exits)是 SAP 系统中用于扩展标准功能的重要技术手段,属于。第二代增强相比第一代(如函数模块出口)更加灵活和面向对象,主要通过。

baidu_35680696的博客 1475

ABAP - 三代增强 BADI

先激活定义的接口在进入SE18激活BADI

HeathlX的博客 1161

SAP BADI增强(三代) 的基本例子

增强简单例子(新手向) 需求样例 使用MM01创建物料的销售视图时,销项税分类的字段自动填写默认值0。 如图: 使用到的TCODE:SE24 、SE18、SE19 基本的步骤概述 (1) SE24-> CL_EXITHANDLER->在GET_INSTANCE中打断点,然后运行相应事物码根据它来找到运行到的BADI。按F8运行,进行程序的BADI查找。 (2)找到合适的BADI,重点!难点! (3)增强实施,创建,以及敲写业务逻辑代码(一般比较简单) (4)代码激活、实施激活。 (5)调试,

寒武青锋的博客 4514
上一篇: BW 学习日记2.0
下一篇: 最近生活状态
opparts
博客等级 码龄24年 23粉丝 27原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值