增强篇5 SAP的5代增强(转自SAP翔子)

时间:2020-01-02 14:33:44   收藏:0   阅读:277

前言:

SAP ABAP,增强就是对SAP 标准程序功能的扩充。比如在事物码ME21N 新建PO 时,
在保存时需要做一些特定的检查,这时候就需要用到增强:
【 ME_PROCESS_PO_CUSE 】
SAP 系统已经给我们预设好了很多增强,我们只需要往这些增强里写代码就行了。

 

以下以个人理解,粗略的介绍下:

SAP增强按照历史先后, 主要四类: 

 

这个子过程中,用户可以添加自己的代码,控制自己的需求。
这类增强需要修改sap的标准代码,它们在发布的时候都是空的,
集中在文件名倒数第二个字符为 Z 的包含程序中,
因为在标准程序中,所以:
(1)程序的全局数据可以使用。
弱点:系统升级时会被新版本覆盖;

这种源代码增强和 屏幕增强的说明
可以从Tcode:
SPRO 后台配置的相关模块的路径里找到;
一般是 UserExit_ 打头的子模块。

这类增强事先要到 service marketplace 申请对象键(Access key),
然后才可以修改这个子程序。
这类增强比较多用在SD模块,比如创建SO 时(VA01).

在SAP发布的版本中,使用Call customer-function ‘xxx‘调用函数模块的,
所以你可以通过在程序中搜索
cusomer-function 来查找第二代增强,
第二代增强函数名构成:EXIT_程序名_‘xxx‘,
这样你就可以找到对应的增强函数模块了,它们在发布的时候只有一句代码
include ‘xxx‘
修改时无需像第一代增强一样需要ACCESS key,直接双击回车就可以了。

从第二代增强都是 子程序了,include or ???
只能使用接口中传递进来的参数。

第二代增强主要有以下几类:
1)E. Enhancement exits:
这些出口以Exit_ 打头,你可以到SE37 中查看,
也可以在表 TFDIR 中查询Exit_ 打头的函数,

2)C. Gui codes,(GUI增强)

3)S. Subscreen (屏幕增强)

4)T. include structure 表/结构 增强,

SAP扩充(增强表) MODSAP,里面记录了所有的smod 增强,
这个表里重要字段
NAME X 增强名
TYP X 组件类型
MEMBER X 增强

TFDIR 函数清单
重要字段:
FUNCName(函数名),
MAND(功能模块激活状态如果是C代表此函数模块激活)。

曾经被问过这个问题 CMOD和SMOD的差别:希望能和大家交流

技术分享图片

都是用CMOD曾经实施,SMOD可以查看实施的组件

 

(1)SAP保证所有BADI的向上兼容性。版本升级不影响标准系统中增强的调用,也不会影响调用接口的有效性。你不必在SSCR中注册BADI。
(2)只能使用一次实施,增强功能可以同时被任意数量的客户激活。?
BADI可根据过滤器的值定义。这使您可以根据特定的标准来控制实施(例如:按照在特定国家)。
(3)BADI包含了所有必要实现特定任务的接口。?

 

源代码发布以接口方式,通过接口的方法调用来实现使用。
自定义增强实际上是实现一个或者多个基于这个接口的实现类,
因为-接口类实际上是一个抽象类,所以- 对于同一个增强会出现不同的源代码,
这些不同的源代码通过 过滤器(adapter) 来区分不同的 业务场景。

Tcode:SE18, SE19 来实现,

***BADI 的查找方法:
1)BADI 对象的信息存储在
SXS_INTER,
SXC_EXIT,
SXC_CLASS,
SXC_ATTR 这四个表

其中 SXC_ATTR 【Exit: Implementationsseite: Attribute】可以找到自建BADI,
IMP_NAME CHAR 20 0 业务加载项实施
VERSION CHAR 6 0 版本号
ACTIVE CHAR 1 0 客户增强激活
MST_LANG LANG 1 0 语言代码
ANAME CHAR 12 0 最后修改人
ADATE DATS 8 0 日期
ATIME TIMS 6 0 时间
UNAME CHAR 12 0 最后修改人
UDATE DATS 8 0 日期
UTIME TIMS 6 0 时间
LAYER CHAR 80 0 业务加载项管理的层值
MIG_ENHNAME CHAR 30 0


2)SAP BADI 程序都会调用
cl_exithandler=>get_instance 来判断对象是否存在,并返回实例,
**我们可以在这个方法处设置断点,获取实例。
这个方法实际是对上面四张表和视图 V_EXT_IMP 和V_EXT_ACT 进行检索,

3)它的调用方式是call method(instance), 可以通过exit_handler关键词来查找。

4)ST05选择“table buffer trace”而不是常用的"SQLtrace",
查找上面的几个表和视图找到对应的BADI.

5)se18 查找接口,se19 实现接口就可以实现用户增强

 

     (4)创建实施,声明代码;

原文:https://www.cnblogs.com/BruceKing/p/12132586.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!