对于增强的理解反驳江正军博客

  • Post author:
  • Post category:其他

反驳需不需要资格?需要,但是你江正军又不是SAP的作者,也是个用户而已。
17.4 第四代增强这部分
SAP的PA教材,从来没有出现过汉语:第X代增强的字眼,或者 fourth generation enhancement 的字眼。有图有真相:
image
sap help中没有这个字眼,PA教材中也没有这个字眼,你自己造词,你好意思么?请中国说的abaper不要再说什么二代增强,三代增强了,太土。
接着反驳:“只有无法通过 User Exit与BADI都无法实现时,才考虑这个(Enhancement-Point)”
我理解你的意思是,只有当你觉得使用User Exit 或者 BADI无法解决问题的时候,才考虑使用explicit enhancement.而不是enhancement-point.你用enhancement-point指代explicit enhancement是错的,错的。
然后你居然觉得User Exit无法实现的情况下,才考虑使用explicit enhancement?你真的是完全违背了PA教材中的精神。
我们要知道User exit的性质属于modification,而explicit enhancement的性质属于enhancement。PA教材从来都在强调一点:尽量不要modify任何SAP的标准程序,尽可能enhancement without modify.
原话是这么说的(BC427)
Enhancement is a jump/link from an SAP program to a customer source code.These three kind of exits are used by customers to implement additional or alternative functions for the SAP program without making modifications.
看到了吧,enhancement这种东西存在的意义,就是让你不要去做modification.
而且,我真的看不到任何理由能够支持,只要能用BADI实现就不要使用explicit enhancement的出处。你可以说是你的经验和建议。
new BADI和explicit enhancement完全是同时代的产物,都是ECC出现后伴随着netweaver 7.0的enhancement framework出现的技术。
“第四代其实是第三代上的加强”
我想吐槽的是,explicit enhancement或者implicit enhancement相对于classic BADI是加强?你太搞笑了。
首先new BADI相对于classic BADI勉强可以谈到加强,因为这两种BADI的表现形式还是很像的,面向对象编程,接口与实现类,作为abap开发我们所要做的工作都是对存在的【增强点】创建实现类,写class去实现interface,然后再class中的某个method中写代码,完成我们需要执行的逻辑。从表面上看,classic BADI基于BADI,而new BADI基于enhancement spot。我们在SE19中创建这两种BADI的操作略有不同。如下图
image
但是本质上,这两种BADI之间由于SAP提供的底层调用机制的不同,造成了performance的巨大差异。换句话说,对于两种BADI来说,你作为一个abaper写的abap代码几乎都是一样的,interface /adapter class/method的表现形式很像。
但是由于SAP在enhancement framework中提供了更先进的调用机制,换句话说,你写的代码是一样的,但是调用你的代码的SAP系统发生了变化,效率提高了。因此new BADI相对于classic BADI有了升级的感觉。

但是,but啊,explicit enhancement 和 classic BADI没有这种关系啊。或者说,从视觉上看,explicit enhancement虽然和new BADI一样基于enhancement spot但是,explicit enhancement和classic BADI没有任何相似之处啊。从前端的操作,到代码表现形式根本没有任何联系,是根本,记住,根本没有联系。
explicit enhancement根本就不是用SE19来创建的,你的明白?
为什么?你非要说经验,我跟你说道理。
因为SAP官方很明确的表示:enhancement framework的最主要的编程工具,根本就是集成在 abap workbench中的。英文的原文是这么说的:The Enhancement Builder is a tool for creating and managing enhancements which is fully integrated into the ABAP Workbench. You CANNOT use a transaction code to call it directly.
explicit enhancement 是的创建工具完完全全集成在SE80中,你需要点击enhancement按钮去创建,鼠标右键等操作。只是你创建完了以后,可以用SE19作为入口进去看看而已。
classic BADI是则用SE19创建的。
这是表面,再看看实质。
explicit enhancement的增强发生在标准源代码中的任何存在enhancement point的位置,换句话说,只要被增强的程序提供了足够多的enhancement point,你愿意加多少增强代码,都可以。
而且你的增强代码和标准源代码都是拼接在一起的。
但是classic BADI甚至new BADI的增强代码,存在于你的BADI implementation类所实现的interface对应的method中,你的代码,存在于且仅仅存在于method中。没有融为一体。
看到了吧,BADI的implementation代码真的看上去很像JAVA实现类的样子,写在方法中。
explicit enhancement的implementation的代码看上去就是在改别人的代码,和interface根本没有关系。
综上所述,explicit enhancement和classic BADI根本就是没有任何继承关系的完全不同的两类技术。

Enhancement Spot也不是enhancement的管理平台,它是new BADI和explicit enhancement的容器。
不存在所谓的Enhancement-point技术,不存在,这是你自己创造概念。enhancement point表示位置,是enhancement spot这个容器中的具体的【增强点】换句话说,表示具体的位置。
“ENHANCEMENT-POINT是在程序中直接插入代码,其概念与BADI的USER_EXIT类似”
这句话真的是漏洞百出,前面不再赘述.explicit enhancement技术怎么可能和BADI或者USER EXIT有任何相似之处呢?眼瞎吗?user exit是modification这个我们已经纠正过了。从表面到内涵没有任何相似之处。
我真不知道,随着知识的修正,为什么不去修改自己博客呢?不觉得丢人么?