sap 一代增强_SAP 4代增强

第二代增强和第三代增强的差别

1、tcode  不同

第二代:cmod 增强管理;smod 实施的增强点。

第三代:SE18  BADI的定义;SE19  BADI的实现

2、实现方式不同

SMOD是基于函数模块的增强,函数名称是 EXIT_程序名_’XXX’。

使用 CALL  customer-function  ‘XXX’  调用函数模块。

函数里面一般是 INCLUDE  ZXXX   一句话,进去里面进行代码增强;

SE19是基于面向对象的增强,

源代码发布以接口的方式,通过接口的方法的调用来实现使用。

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

BADI新方式实现

1-构建BADI

2-实现BADI

3-使用ABDI过滤器

4-多个实现时调用谁

查找系统中的BADI

BADI详细说明文档

示例:通过BADI实现采购订单屏幕增强

需求说明

step1:标准表ekko、ekpo结构扩展

step2:创建自定义表

step3:create function group

功能函数

标准表扩展所涉及的函数

Z_PO_SUBSCREEN_GRP_POP_HEAD

Z_PO_SUBSCREEN_GRP_POP_ITEM

Z_PO_SUBSCREEN_GRP_PUSH_HEAD

Z_PO_SUBSCREEN_GRP_PUSH_ITEM

自荐表扩展所涉及的函数

Z_PO_SUBSCREEN_GRP_POP_ITEM2

Z_PO_SUBSCREEN_GRP_PUSH_ITEM2

Z_PO_SUBSCREEN_GRP_INIT

Z_PO_SUBSCREEN_GRP_OPEN

Z_PO_SUBSCREEN_GRP_GET_DATA

Z_PO_SUBSCREEN_GRP_SET_DATA

Z_PO_SUBSCREEN_GRP_POST

Z_PO_SUBSCREEN_GRP_COMMIT

全局数据定义

LMEVIEWSF01

子屏幕设计

0100

0101

0102

0103

step4:BADI  ME_GUI_PO_CUST  的实现,子屏幕数据传递处理

step5:BADI  ME_PROCESS_PO_CUST 的实现,数据处理

通过程序查找出口对象或ABDI

Enhancement Framework基本概念

为自己的程序创建显示增强Explicit  Enhancement Spot

隐式与显式增强

系统标准表结构增强

Include Struture

Append Struture

SE14调整

BADI新方式实现

1-构建BADI

1.SAP  BADI的由来

由于各个国家财务制度以及税务制度的差异,SAP希望在自己的程序开发平台中引入BADI,能够让开发人员自己编写业务插件,系统会自动调用这些插件程序来完成某种业务运算。

2.创建一个Enhancement Spot

Enhancement Spot 是作为一个BADI容器,在这个容器里面,我们可以定义自己的多个BADI。

在TCODE  SE18

3、定义一个BADI

在新建的Enhancement Spot中创建一个BADI,选择如图的按钮

4、定义一个BADI接口

接下来我们需要一个接口来定义这个BADI所需要的方法

双击接口,此时可以选择或者输入一个新的接口名

为z_if_test3创建一个方法get_test,并设置其参数

至此,我们已经建立了一个Enhancement Spot,而且带有一个BADI和一个接口,仅仅如此是不能使用这个BADI的,我们需要一个BADI实例来在程序中被调用。

5、现在我们调用一个小程序来调用这个BADI的方法get_test,系统中有两个关键字用来得到BADI实例和调用BADI,分别是get badi 和call  badi。

由于还没有实现,所以报错。

2、实现BADI

一个Enhancement Spot 可以定义多个BADI,每个BADI又是由一个接口和多个实例类组成的。

Enhancement Spot相当于容器的概念,用来存储多个BADI,而每个BADI又必须定义一个接口,该接口可以有一个或者多个实现类,BADI实质上就是将接口和实现类组织在一起,而BADI本身又可以代表接口本身的概念了,(因为一个BADI只有一个接口)。

1、建立一个BADI增强实现容器

由于一个BADI的实现可以有多个类,这些多个实现类需要组织在一起(与多个BADI放在一个Enhancement Spot中是一个概念),所有需要先创建一个新的BADI增强实现容器,如图:

2、BADI类实现

紧接着要求输入BADI的实现名和实现类

当保存后,会自动跳转到BADI增强实现的界面(因为BADI的实现类可以有多个,所以新开一个界面来专门来进行BADI的实现过程)

一个增强实现(Enhancement implementation)可以有多个implementations(相当于多个版本),但起作用的同时只能有一个,有多个版本时需要进行设置:

两个实现版本类所实现接口GET_TEST方法如下:

上面虽然建了两个BADI  Implementation (Z_BADI_IMPL_01、Z_BADI_IMPL_02),或者说两个实现类(Z_CL_BADI_IMPL_01、Z_CL_BADI_IMPL_02),但这些都属于同一个Enhancement  Implementation(Z_BADI_IMPL_C)的,对于BADI定义(Z_BADI_TEST3)来说,只有一个增强实现,而增强实现里虽然创建了两个实现类,但同时只有一个起作用,所以目前最终只有一个Enhancement Implementation,可以创建多个不同Enhancement Implementation 增强实现。

如果激活方法时出错,原因是目前有连个BADI的实现,所以需要把其中一个的Implementation is  active 前的钩去掉才能被激活。

当加上过滤器之后,需要将此钩打上,不然在运行时如果通过过滤器选择的是此实现时,调用程序是dump掉

当有多个BADI实现时,需要增加过滤器来选择使用那个实现类。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值