BC425读过有年头了,不过一直没有总结出来。今天上午把大概比较重要的知识点总结出来,有很多是即使做过enhancement的人也不是很清楚的。具体图片请参考附件
Table Enhancement
l Append Structure
l Append structures are created for use with a specific table
l Multiple append structures can be used with a single table
l Append structures can be used just like any other structure
一个structure只能append给一个table,但是一个table可以append很多structure.
如果copy一个有append structure的table,那么append structure里的字段都将成为新表中的普通字段。
可以对pool和cluster表append structure,但是如果表中有LCHR LRAW字段则不行。
Structure和field的名字用customer namespace(ZZ YY)防止SAP系统升级时产生冲突,SAP系统升级时,会自动保留append structure。
l Customizing include
n Must be specified by the SAP developer
n Is created by the customer
Include可以同时插入到很多表中。命名规约为以CI_开头,确保不与SAP标准冲突。Include中的字段名字以ZZ 或YY开头。
Text Enhancements
l Data Element Keywords
l Documentation
Customer Exit
TCODE: CMOD SMOD(参考Tim的讲解)
l Function Module Exit
在SAP标准程序用,用CALL CUSTOMER-FUNCTION来调用,而且后面只是一个号码,比如001.
系统自动调用EXIT_<Programe_name>_001这个函数。其中program name便是拥有function module exit的SAP标准程序名。另外,这些function都是存在于X开头的function group中。Function中都有一个zx开头的include语句,为客户开发预留。
对于X function group,SAP也有一些规定:如果function group的程序名为SAPLXAAA,则全局数据存储在LXAAATOP中,所有的function module存储在LXAAAUXX中,每一个function module对应存储在LXAAAU01…XX中。Subroutine存储在LXAAAF01…LXAAAFXX中。Group中的include要么以LX开头,要么以ZX开头,我们只能编辑以ZX开头的。比如自己定义的TOP include ZXAAATOP用来保存全局数据。自己创建的其他Object:ZXAAAO01(PBO) ZXAAAI01(PAI)ZXAAAE01(ABAP Events)
l Menu Exit
Menu Exit允许将自定义的功能附着在SAP菜单之上。这些为客户预留的menu exit在SAP中,FCode以‘+’开头,在激活project之前不会显示。Menu Exit一般都会有预留的function module exit与之配合一起工作。
l Screen Exit
Screen Exit允许我们在SAP预留的screen area中定义自己的subscreen。在系统程序中,调用screen exit的方法为:
PBO CALL CUSTOMER-SUBSCREEN <area> INCLUDING <X-function-pool> <screen_number>
PAI CALL CUSTOMER-SUBSCREEN <area>
我们要在相应的function group中创建PBO PAI相应的module.而系统程序主屏幕与subscreen调用顺序如下:
而使用screen exit的一个最大问题在于数据的交换。因为标准系统程序并不会知道用户自定义屏幕中会有什么字段,所以不会预定义全局变量给它。需要在PBO系统预留的function module exit中讲subscreen可能需要的当前数据传输给子屏幕。而子屏幕经过处理再通过在系统程序PAI中预留的function module exit传输回来。具体过程如下图:
l BTE
Business Transaction Events (BTE) are enhancements that were developed for the Financial Accounting (FI) component of R/3.
BTE是专门为FI准备的,在执行某些动作是触发。我应用不是特别多,有时间再仔细研究一下,写出来细节。
BTE调用的细节图如下:
BTE的一个特点就是可以有多个实现。多个被激活的实现在执行中被逐一调用
在程序找到一个BTE的方法为:在程序中搜索 OPEN_FI_PERFORM 以及在IMG中FI下找到Use business transaction events子菜单。
BTE与customer exit相比有如下不同:
BTE只提供源代码级别的exit,没有menu screen。BTE可以重用,不是跨client的,并且可以过滤。
l BAdIs(Business Add-Ins)
关于BAdI tim有过不错的介绍。可以简单的认为是一个OO版本的enhancement,但是它有很多新的特性。比如BAdl可以指定过滤条件,可以重用,只有被筛选出来的BAdl才会被执行。
BAdl的执行序列如下图
BAdl的命名规约为:BAdl的interface为 IF_EX_<badi> ZIF_EX_<baid>或者自定义namespace/IF_EX_<badi>
实现的类为CL_IM_<badi> ZCL_IM_<baid>或者自定义namespace/CL_IM_<badi>