sap abap初体验5之增强

5 增强

5.1 定义

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.2 第一代

这些Form集中存储在一些文件名倒数第二个字符为Z的包含程序中(如后面销售凭证主程序SAPMV45A中的MV45ATZZ、MV45AOZZ等Include文件)

这些Form的名称一般是以UserExit_打头的子模块,所以一般找到所要增强的主程序,再查找UserExit_ 关键字即可找到相关的出口

Form源代码增强事先要到 service marketplace 申请对象键(ACCESS KEY),然后才能修改这些子程序,另外,可以在SPRO中搜索 USER EXIT关键字来查找
在这里插入图片描述

子程序中,user开头的
在这里插入图片描述

5.3 第二代

在这里插入图片描述

在SAP发布的版本中,使用CALL CUSTOMER-FUNCTION <3位数字>调用函数模块的,所以你可以通过在程序中查找cusomer-function来查找增强,出口函数名称由三部分组成:EXIT_<程序名>_<3位数字>(注:这里的<程序名>即指调用此出口函数的程序名),这样你就可以找到对应的增强函数了

针对数据表的增强出口是 “CI_ ”打头的结构,这些结构将.INCLUDE 结构的形式包含到时相应的数据表中,用户可以通过向这些结构中添加字段从而达到对数据表字段的增加

查找Enhancement的方法:

1、 在程序中搜索CUSTOMER-FUNCTION找到后面的3位数字编号,出口函数名的规则为EXIT_<程序名>_<3位数字>,然后通过找到的出口函数名到MODSAP表里查找所对应的出口对象(即增强点)

2、 通过调试系统相关函数:MODX_FUNCTION_ACTIVE_CHECK

3、 代码找增强

以VA01对应的主程序SAPMV45A为例,在源码中可以查找包含CALL CUSTOMER-FUNCTION的字符串,可以找到这样的代码:

在这里插入图片描述
根据出口所对应的函数名规则,这个函数名为EXIT_SAPMV45A_910

5.3.1 SMOD维护激活,CMOD最终实现激活

用SMOD(激活增强,只需一次激活)和CMOD(实现增强)维护;
在这里插入图片描述

5.3.1.1 MODSAP表,存的是增强总信息

在这里插入图片描述

功能增强:例如字段校验、字段之间日期校验等
屏幕增强:例如销售订单附加数据等
表增强:append和include
GUI增强:增加个功能操作按钮

屏幕增强和表增强是相互关联的。

例如RMVKONOO这个增强,包含两个E的和一个T的:
在这里插入图片描述

5.3.1.2 TFDIR表,主要是存E功能的,MAND字段为C表示激活

在这里插入图片描述

5.3.2 第二种方法,通过一些函数,主要是查增强的

在这里插入图片描述

例如函数:MODX_FUNCTION_ACTIVE_CHECK
1.设断点
在这里插入图片描述
2.执行VA02,保存后,断点到函数

在这里插入图片描述

3.关注几个变量
在这里插入图片描述

4.双击F_TAB[]进入,内表存的是两个出口,MAND表示未被激活,正常一个是表头,一个是行。通过函数的描述可以判断

在这里插入图片描述

5.se37找到函数EXIT_SAPLMCS1_001,没激活不好用

在这里插入图片描述

5.3.3 增强示例-物料主数据修改mm02

5.3.3.1 随便针对一个物料,修改下旧物料描述

在这里插入图片描述

5.3.3.2 发现EXIT_SAPLC1F2_001增强,而且直接走到退出

在这里插入图片描述

5.3.3.3 去TFDIR表核实下是否被激活**

在这里插入图片描述

5.3.3.4 去modsap里面,找到增强对应的函数信息C1F20001

在这里插入图片描述

5.3.3.5 smod定义该增强,选择C1F20001*

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.3.3.6 保存,在TFDIR查看并未激活**
5.3.3.7 使用cmod激活,发现该增强已经建立到REACH200中去了,激活即可**

在这里插入图片描述

5.3.3.8 在TFDIR查看已激活**

在这里插入图片描述

5.3.3.9 修改函数添加**

在这里插入图片描述

最终效果
在这里插入图片描述

5.4 第三代

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

SAP增强类别

在这里插入图片描述

5.4.1 继承程序代码示例

在这里插入图片描述
在这里插入图片描述

5.4.2 再论直接改代码增强弊端

一段程序是多个事务代码公用,不确定是否第二代改完后,是否影响其他事务代码,例如VA01的程序,其实为N多的TCODE使用。
在这里插入图片描述

5.4.3 BADI

在这里插入图片描述

为什么要BADI

在BW对数据源做增强时,往往出现2个顾问同时修改一个数据源,同时增强一个数据源的情况,有可能进度不统一,只能排队操作。而如果用面向对象的BADI增强,那么只关注自己的实现即可,避免了这种情况。

5.4.4 BADI两部分组成

在这里插入图片描述

Enhancement spot,就是管理“类接口的,一般不用定义,都由SAP管理,类似于函数组

在这里插入图片描述

5.4.5 SE18创建Enhancement spot和BADI

SE18创建Enhancement spot
在这里插入图片描述

作用是为BADI使用
在这里插入图片描述

在这里插入图片描述

在Enhancement spot创建BADI

在这里插入图片描述

在这里插入图片描述

去掉复合使用(能用于其他使用)

在这里插入图片描述

BADI必需有一个接口
在这里插入图片描述

接口里面有各种属性,函数等
定义接口方法
在这里插入图片描述

点击参数,定义函数的参数,其中输出参数2定义为值传递
在这里插入图片描述

5.4.6 代码调用

在这里插入图片描述

因为没写具体的实现代码,肯定报错的

在这里插入图片描述

如果想在未定义自己的实现类时,走默认的继承方法,可以在空实现时,定义回调类,说白了就是后补

在这里插入图片描述

点击到代码里面去

在这里插入图片描述

在这里插入图片描述

定义代码:
在这里插入图片描述

再次调用BADI

在这里插入图片描述

5.4.7 定义正规军,BADI实现

在这里插入图片描述

建包,类似于目录

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
创建空类

在这里插入图片描述

编辑代码

在这里插入图片描述

编辑代码如下(中间实现的名字修改过一次为Z_LGZBADI_LGZ,当时不知道为何进不去代码编辑页面,可能因为引用了BAK回调类):
在这里插入图片描述

再次调用call,跟回调类结果大不相同。
在这里插入图片描述

5.4.8 还是销售订单做示例,查找

在SAPMV45A查找
在这里插入图片描述

例如找到了

在这里插入图片描述

查找其定义的地方if_ex_badi_sd_dpbp

在这里插入图片描述

用SE18查看

5.5 第四代

在这里插入图片描述

5.5.1 自己创建代码做测试

直接创建一段代码,点击创建选项

在这里插入图片描述

在这里插入图片描述

最终代码

在这里插入图片描述

点击增强

在这里插入图片描述

然后继续点击创建实施

在这里插入图片描述

在这里插入图片描述

添加代码,执行效果,相当于在源程序里面加了自己的一段。但是再修改原程序就不让修改增强了(其他肯定可以再修改)

在这里插入图片描述

在这里插入图片描述

5.5.2 在标准代码

在标准程序

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值