SAP ABAP 开发增强基础

  • 增强的概念
  • 增强的分类
  • 常用的增强
  • 增强实战
总结

一、增强的概念

增强就是SAP系统中标准程序的出口,在该出口中由用户根据企业实际需求编写客户化逻辑代码。
增强是SAP系统设计时考虑到企业实际的流程有可能和系统默认标准流程不同,在标准流程框架下专门留的接口。
每个接口对应一个客户化函数,这些出口函数有标准处理程序传入的参数和输出参数,用户可根据系统输入参数做条件编写适合本企业流程的逻辑,然后通过输出参数传输回。

二、增强的分类

1.用途分类

E类
Enhancement exits ,即通常所谓的用户出口( User_ exit )。用户出口也叫功能出口(Function Exit)。
使用Tcode:SE37,搜索EXIT*,找到的函数大都是做系统预留的出口函数,前面说过,用户出口是标准程序留给用户的接口,标准程序通常不允许用户任意修改,如果修改需要申请Access Key ,而且修改标准程序可能导致的错误erp公司通常是不负责的。在SAP中自定义的程序通常以保留字 Y或Z开头,因此,出口函数中都预包含了一个 Z 开头的程序。

C类
GUI接口(Gui Codes)。菜单增强就属于这类增强。

S类
屏幕增强(Screen Exit)。 比如,在建立采购订单,工单和固定资产主数据时,系统都预留屏幕增强,也就是说允许用户自定义用户输入界面并编写相应的输入输出处理程序。

T类
在各类增强中,可能还 用户自己定义结构或表格,系统对应类型T类。比如增强MM06E005允许用户建 立两个结构CI_ EKKODB和CI_ EKPODB。(数据库增强)

2.发展分类

第一代增强(增强嵌入标准程序中)

第一代增强(基于源代码的增强)是sap提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标准代码,它们在发布的时候都是空的,集中在一些文件名倒数第二个字符为Z的包含程序中,由于在标准程序中,所以所有程序的全局数据都可以使用,但同时 系统升级时会被新版本覆盖;这种源代码增强和屏幕增强的说明可以从事务码spro后台配置中相关模块的路径里面找到; 一般是以UserExit_ 打头的子模块。这类增强事先要到service marketplace申请对象键(ACCESS KEY) ,然后才能修改这些子程序。

第二代增强(SMOD,CMOD)

第二代增强(基于函数模块的增强) , 用事务SMOD和CMOD来维护;
在SAP发布的早期版本中, Call Function 'EXIT_ 主程序_ XXX' 来调用函数模块;而在较新的版本中使用Call Customer-Function ' XXX' 调用函数模块的。第二代增强函数名构成: Exit_ 主程序名’XXX(3 digital number)’, 这样你就可以找到对应的增强函数模块了,它们在发布的时候只有一句代码Include ’ZXXXXXXX' , 修改时无需像第一代增强一样需要Access Key,直接双击回车就可以了,但同时这种增强以及后面几代的增强都不能像第一代一样 随便使用程序的全局数据,只能使用接口中传递进来的参数。

第三代增强(BADI,SE18/SE19)

第三代增强(基于面向对象概念的增强BADI ( business add-in ) ),源代码发布以接口的方式,通过接口的方法调用来实现使用的。用户增强实际上是实现-个或多个基于这个接口的实现类,因为接口类实际上是一个抽象类,所以对同一个增强会出现不同的源代码,这些不同的源代码是通过过滤器(adapter)来区别用于不同的业务场景的。这种增强是用事务SE18和SE19来实现的。

第四代增强 ( Enhancement Framework )

第四代其实是第三代的加强switch Framework。 当sap进入newweaver 7.0以后推出的新增强体系,主要包含四个方面:
Source Code EnhancementImplicit enhancement option 隐式增强
Explicit enhancement option 显示增强
Enhancement pointSAP增强
Enhancement sectionSAP New Enhancement Framework代码增强
Function Group EnhancementClass Enhancement.

三、常用的增强

1.常用增强——第一代增强:销售订单屏幕增强与功能增强;

(增强点在程序SAPMA45A中有明显标志)

查看该程序子例程以USEREXIT_开头的即为增强出口,这些出口就包含在上图的INCLUDE程序中。

2.常用增强——第二代增强:成本中心屏幕增强;

增强点在程序SAPMV45A中有明显标志先SE93找到KS01 (成本中心创建)对应程序SAPLKMA1 ,然后SE11查询表 TADIR找不到对应开发类,通过SE38查看SAPLKMA1开发类为KBAS ,然后再用SE11查询表TADIR可以查到可用增强 点有COCCA001、COCCA002、 COOMEP01、COOMKA01. COOMKS01、COOMKSO2、 COOMKS03、COOMLA01 ,然后将这些增强点在MODSAP中查询,就可以发现只有COOMKS01可以对成本中心主数据屏幕做增强,并且此增强点包括了屏幕增强、菜单增强、表增强、功能增强。

3.常用增强——第三代增强:BADI增强—生产订单收获

4.常用增强——第四代增强:BTE增强—修改客户最终检查

四、增强实战

1.第一代增强
销售订单屏幕增强:销售订单抬头屏幕增强(VA01/VA02/VA03)
(销售订单抬头其他不可以做增强,附加数据A和附加数据B可以做增强)

A.确定需求,找到增强位置:销售订单抬头附加数据B做增加字段的增强

O.增强点确认:
SE93->VA02

输入要修改的事物代码,点击显示
双击屏幕程序
点击Object list 显示对象列表
找到要修改的屏幕

当判断程序是否是目标程序时,可以通过加字段的方式进行验证。

点击格式(/布局),根据弹出的框,进行修改

点击“格式/布局”
针对弹出的框,点击修改

需要向SAP申请Access Key来修改SAP标准程序。

image.png

或者根据键值工具,生成键值,输入访问的键值后就可以修改标准程序了。(这种情况在sap中没有备案,当sap升级时,不能保证修改的程序依然存在。)

添加文本进行测试

输入名称,文本,然后保存激活
添加成功

B.屏幕增强实现
(第四类增强,往标准表中拓展字段)
在屏幕中添加字段,需要把字段放在数据库中的一个值中,
SE11,输入透明表VBAK,在字段中找到修改标准表的一些方法,如.APPEND/.INCLUDE等方法,可以用来修改标准表。

然后同样APPEND一个自己开发的方法:如ZVBAK_HY.创建步骤如下:

(1)首先SE11创建一个结构,如ZVBAK_HY

选择结构

根据之前创建的学员信息表,在组件的位置添加一个学号的字段。
(如果没有表的话需要重新创建域和学号等数据元素)

然后点击保存,激活
放入创建好的包和请求号中

(2)激活完后,需要把创建的结构拓展到标准表中
se11,打开VBAK表,点击编辑时,同样需要Access Key输入访问键值。

在VBAK表中创建结构,把刚才创建好的结构添加进来

(3)使用创建好的结构进行屏幕的定义。

总结:第一代增强,需要获取sap的准许才能修改,需要向sap发送请求,同时也可以通过“Sap Key Generator 算码器”工具获取授权。接下来修改程序时,除了需要修改屏幕文本信息代码,还需要修改数据库字段,对标准表字段进行增强,用附加结构APPEND的方式,最后在定义屏幕时就可以使用添加的结构,然后通过PO或PI的操作,把数值放入BAPI中。

2.第二代增强(通过CMOD实现)
采购订单抬头屏幕增强(ME21N/ME22N/ME23N)
(MM06E005在采购凭证中的客户字段)

A.屏幕增强位置

需求截图

O.增强点确认:
可以通过查找的方式,首先查找第一代增强SE93->ME23N

然后第二代增强查找,SE37打开“MODX_FUNCTION_ACTIVE_CHECK”函数,设置37行断点

打开函数

运行TCODE-ME23N,打开一个采购订单,系统在断点处终止。

设置断点后,输入事务代码ME23N进入
找到function变量,然后输入事务代码se11

触发MODSAP表,找到增强实现function的编号

找到的编号即为第二代增强的增强点

编号

打开sap增强界面,事物代码SMOD,然后输入上面的编号“MM06E005”

点击组件

B.增强点实现
事务代码:CMOD

输入刚才的增强编号

注:第三类增强只允许做一次。

查看“YMM06”的增强

然后点击“组件”

查看增强

当激活后,选择下面“0101”的屏幕出口,然后输入文本描述

都激活后,输入“/OME23N”,查看增强效果

增强成功

接下来做其他的增强,如读取数据、写数据等

总结:第二代增强的实现方式:首先同样需要确定增强位置;然后使用SE37打开“MODX_FUNCTION_ACTIVE_CHECK”函数,设置一个断点,找到变量,触发断点,再反查SAPMOD的表然后找到系统增强点的编号,根据编号属性的描述信息,最终确定要修改的增强点。

3.第三代增强
交货单抬头屏幕增强(VL01N/VL02N/VL0N)

A.屏幕增强位置
点击抬头,会发现有与你有BADI输入相同描述的选项出现

O.增强点确认
通过第一代、第二代(SE37进入后,debug函数"MODX_FUNCTION_ACTIVE_CHECK"查找)都没有找到增强点,接下来查找第三代增强(与第二代增强的区别是使用的函数不一样)。
BADI查找方法:
SE37打开函数“SXV_GET_CLIF_BY_NAME”,第10行设置断点

设置断点后,运行TCODE-VL02N打开一个交货单

打开调试界面后,点击F8执行

定位BadI:"LE_SHP_TAB_CUST_HEAD"
se18,输入"LE_SHP_TAB_CUST_HEAD",查看BAPI

B.屏幕增强实现
SE19实现增强,画屏幕,增强表结构,表数据,写逻辑。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容