SAP 4代增强

*20170325 160000

以下之外,

还有:1.替代, -用过一次;2.BTE -没用过,需要学习;

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

1.Tcode 不同:
第二代: CMOD 增强管理,SMOD 实施的增强点;
第三代: SE18 BADI定义,SE19 BADI实现;

2.实现方式不同;

SMOD 增强 是基于函数模块的增强,函数名称是 EXIT_程序名_‘xxx‘,
使用CALL customer-function ‘XXX‘调用函数模块,
函数里面一般是 INCLUDE Zxxx 一句话,进去里面进行增强代码;

SE19增强 是基于面向对象的增强,
源代码发布以接口方式,通过接口的方法调用来实现使用。
通过 接口名称 找到对应的方法:
如:
采购订单创建的检查:BADI:ME_PROCESS_PO_CUST
在所提供方法中->找到对应方法->实施增强;
INITIALIZE
OPEN
PROCESS_HEADER
PROCESS_ITEM
PROCESS_SCHEDULE
PROCESS_ACCOUNT
CHECK
POST
CLOSE
FIELDSELECTION_HEADER_REFKEYS
FIELDSELECTION_HEADER
FIELDSELECTION_ITEM_REFKEYS
FIELDSELECTION_ITEM

3.查找方式不同,

4.能够实现的功能是否相同?

通过网络资料学习SAP 的4代增强:

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

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

1.第一代(基于源代码的增强)是SAP提供了一个空代码的子过程,

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

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

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

2.第二代增强(基于函数模块的增强),用SMOD和CMOD 维护

在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代表此函数模块激活)。

3.第三代增强(基于面向对象概念的增强 BADI-[ business add-in ]),使用SE18管理,SE19实施,

(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.第四代是第三代的加强 switch Framework

SAP 进入NewWeaver 7.0后 推出的新增强体系,将BADI 改名叫新BADI。
还新增了 Enhancement spot 和Enhancement section 以及隐式增强点的概念,
基本在面向对象的程序里实现处处可以增强,
这类增强一般
可以加在一个函数过程的开头和结尾的地方。

***隐式增强:
1)寻找隐式增强方法:
使用debug 方式,跟踪业务处理过程,记下经过的 程序,子程序,函数名,
最好是在标准业务结束前的最后环节,去确认是否有可用的隐士增强点。

如有,实施步骤:
(1)使用圈圈 增强menu,

(2)菜单:编辑-》增强操作-》显示隐式增强选项;

(3)代码框行号前有箭头的表明有隐式增强点,可以创建,
操作隐式增强点 4个menu:
创建,更改,替代,撤销,(所以隐式增强没有删除,是标准撤销)

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

时间: 2024-10-12 06:52:23

SAP 4代增强的相关文章

SAP中寻找增强的实现方法(转)

SAP 增强已经发展过几代了,可参考 SAP 标准教材 BC425 和 BC427.简单的说SAP的用户出口总共有四代:1.第一代  基于源代码的增强.SAP提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求.这类增强都需要修改sap的标准代码.示例:USEREXIT.. in SAPMV45A 源代码增强以子程序形式发布,在 SAP 的发行版本中,使用 PERFORM 调用这些子程序,它们在发布时都是空的,集中在一些文件名倒数第二个字符为 Z 的包含程序中.用户增强时

【ABAP系列】SAP ABAP MRKO增强

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP MRKO增强 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 MRKO其实是个报表程序 这个报表程序存在着很多问题 很多时候满足不了使用 1:做增强 2:拷贝重写 我现在暂时做了增强 1:出口RMVKON00 2:隐士增强 出口增强借鉴了网上的例子 寄售记录表:rkwa , "Con

SAP 金税接口增强 BADI

  SAP与金税连接有两种方式:组件接口及文本接口. 文本接口为例: 1.SAP取发票数据.主要来自合同,销售订单,交货单.发票,客户供应商主数据等 2.SAP处理:合并.拆分,折扣等 3.导出TXT文本 4.金税开票机读取文本:通过參数传递数据,注意1分钱误差问题(參数传递导致) 5.回写     收票方名称  出具发票地址的增强BADI:   IDGTCN_CUST_ADDR   接口回传后将金税发票号回写相应的財务凭证的reference字段的增强BADI: IDGTCN_WRITEBAC

SAP模块常用增强总结{转载}

MM模块: 采购订单增强: BADI :ME_GUI_PO_CUST ME_PROCESS_PO_CUST 物料凭证增强: BADI:MB_DOCUMENT_BADI USER-EXIT:MBCF0002 实现功能1.当参照预留过帐时,检查填入数量是否小于预留数量 2.移动类型是***的时候,查看RSNUM是否为空 3.检查原始单据工厂和库存地点与物料凭证的工厂和库存地点一致 MBCF0009 实现功能1.当移动类型是***的时候,库存地点只能是**** 2.工单下达日期+时间小于预留需求日期+

SAP 菜单增强

SAP中菜单增强也叫GUI代码增强(C),是SAP第二代增强(Enhancement)的一种,其它三种分别是功能退出(E).屏幕增强(S).表增强(T). 可以通过SMOD查询菜单增强的定义,通过CMOD创建一个增强,来实现增强功能. 假设有一个屏幕增强的Enhancement为QQMA0003 ( QM:"转向"菜单中的"用户数据"功能),它包括两个增强点,分别是 功能退出                       EXIT_SAPMIWO0_004 Menu

[ZT]Enhancement-01

Enhancement(1)--BTEs 最近一个同事碰到一个FI的增强,要用BTEs实现,我也是第一次接触到这种增强,所以跟着他一起做了一下.写一个这方面的小节. BTEs(Business Transaction Events),是SAP的一种增强方式,技术上讲是介于Customer Exits和BAdIs的产物. 它主要有两种类型的接口: Publish and Subscribe Interface Process Interface 其比较核心的理念是,使一个接口重复利用,多种实现并且

SAP 中如何寻找增强

方法一.利用TCODE寻找增强(第二代的增强) 执行一个程序(源代码后附),在选择屏幕处输入你所需要增强的程序TCODE,执行後,就会出现一个列表,那里就有关于如何增强这个的绝大部分SMOD增强. 点击进去,自己手动寻找需要的增强. 这是第二代增强 方法二.利用系统函数寻找         MODX_FUNCTION_ACTIVE_CHECK 在这个FUNCTION的代码最后添加一个断点.执行需要增强的TCODE,如果有增强,就会自动跳入DEBUG界面.在DEBUG界面,查看f_tab字段,这里

SAP 增强表MODSAP 和TFDIR

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

SAP 第四代增强-BTE

第四代BTE实例详解:http://blog.csdn.net/wbin9752/article/details/7954922 第三代增强(BADI实例详解) :http://blog.csdn.net/wbin9752/article/details/7951390 第二代增强(SMOD.CMOD):http://blog.csdn.net/wbin9752/article/details/7919817 第一代增强:http://blog.csdn.net/wbin9752/article