出口、badi、 隐式增强
出口:两个事物代码:cmod、smod
一般项目里都会开发一个查找增强出口的程序。
例子:MM01里有两个出口,我们可以在做出口的函数里写代码。如:通过出口实现判断,当物料组为0003时不能修改物料描述,如果修改物料描述了给出错误的消息提示,否则正常保存。
单击保存的时候会自动检查屏幕输入和保存,也可以尝试先点击检查来检查屏幕输入。
1.我们找到出口后,可以先根据后面的描述先判断应该用哪一个出口函数。
2.还可以在所有找到的出口函数里都打上端口,debug看看是在哪个函数里写增强代码。
哦之前没说一下,上面的操作都是在SMOD里面操作的,我们写好的增强还要维护到CMOD里面,因为便于规范管理,在这里激活了才能起作用,也有反激活,反激活就是增强没有效果。
第二种查找增强出口的方式是这样的:
在程序里/h后 在一个特点的语句下面打断点。
在call customer-function 出口都是这个关键语句 把关于这个关键语句全部打上断点,然后执行到这些点都会停下来,这些都是出口函数的位置,比如我们会看到
all customer-function ‘001’注意这个函数并没有函数名但是 在系统是以后面的这个001编号调用的。但是怎么能知道这个函数名呢,它有一个拼接规则的,出口函数都是以exit_开头的,后面加一个主程序名称,左上角上会有主程序名字如SAPLMGMU_ 后面再加上一个001编号,就变成了exit_SAPLMGMU_001那么这个就是该函数,但是我们在使用的时候都是在smod下面使用该函数的,怎么办呢, 怎么才能找到对应的组件名称呢,答案是我们可以在se37里面查找该函数,在属性下面找到该函数的package,由package在smod里面按照该开发类去找所有对应该开发类下面的组件,一一单击进去找到有该函数的组件就可以在里面写增强代码了,但是还有一个方法比较简单就是在数据字典表modsap里面根据该函数去查找,因为该表里存的是函数和增强的对应关系,还有一个表是cmod和smod对应关系表modact,还有一个是modattr存的是cmod的项目名称,其中STATUS = 'A' 说明是激活的状态 ,还有其他的mod开头的表都是跟增强有关的,以后可以研究看看。
备注:cmod中激活后,smod会自动激活。但是smod取消激活 comd也还是激活状态,代码是无效的。
隐式增强和BADI 以后再更新,先提示一下BADI的两个事物代码是SE18 和 SE19 ,查找BADI函数的时候也是要在调试的时候查找,在带有关键句是 call badi句都打上断点,一般做增强还是出口用的多。