基础)
099、增强(Enhancement)基础上个月排查一个采购订单的审批逻辑,用户报“明明打了勾,保存后勾没了”。我直接SE38进程序,断点打在PBO,勾选状态一切正常。再往下走,PAI里有个函数叫ME_MESSAGE_SCHEINE_CHECK,看着眼熟,但总觉得哪里不对。一查——这个函数是SAP标准的,但被人用“增强”改过,里面有一段自定义代码,把某个字段的值在特定条件下重置了。这就是典型的“标准程序里看不见的代码”。你翻遍源码都找不到这段逻辑,它躲在增强里。今天就把增强这层窗户纸捅破,别像我当年那样,对着一个不存在的字段值查了三个小时。先搞明白增强到底是什么。SAP标准程序是黑盒子,你没法直接改它的源码——升级会被覆盖。但SAP留了后门,允许你在特定位置插入自己的代码,不改原件,只做“附加”。这个附加机制统一叫Enhancement,中文叫增强。ABAP里常见的增强有好几代,老一代是User Exit,新一代是Enhancement Framework,还有BAdI、隐式增强、显式增强,以及更老的Second Exit、Substitution之类。公众号上那些文章喜欢把他们混在一起讲,越讲越乱。咱们按实际代码里碰到的来分。最老的User Exit,其实就是系统预留的一个空子程序或者函数,名字里通常带EXIT_或者USEREXIT_。你搜程序,会看到这类包含文件,比如程序里有一段INCLUDE ZXVBAP01,这个include就是给客户留的。你在里面写代码,就等于把逻辑插到标准流程的固定点上。缺点是这种点必须由SAP预先定义,没定义的地方你插不进去。而且这些include代码经常是空壳,你得自己去找对应文档。我见过最坑的