在SAP标准程序做隐式增强的时候跳出一个增强模式选择“声明”或者“代码”:如下图:
这两个选项有什么区别呢?
点击“信息”有英文的解释:
上面清晰解释:一个隐式增强选项的增强实现可以通过两种方式被增强框架绑定到源代码中。
【声明】:作为一个无条件的调用,用于声明和定义。
在这种 "静态 "增强中,你可以添加和替换数据声明,例如。调用增强功能是独立于客户端进行的。增强功能在系统的所有客户端都是可见的。
即:只要激活了,代码就在系统中生效了。
【代码】:作为条件性调用,用于源代码。这里实现的增强功能是 "动态 "调用的,也就是说,取决于当前的开关设置。
即:有一个增强开关,只有那个增强开关打开了,增强的代码才生效。
注意:
* 子程序、方法和局部类的定义不能在 "动态 "增强的实现中实现,而只能在
"静态 "的实现。
* 数据声明应该在 "静态 "增强实现中实现。
* 在运行时,"动态 "调用并不能确保与 "静态 "调用相同的性能。
下面我们做列子举例实现下:
- 新建一个业务开关,事务代码SFW1
输入名称之后,这里选择你增强需要放置的包。
2. 我们新建一个业务框架功能,事务代码:SFW2
如果你TYPE里面没有选择G,那你还需要选择Business Function Set。
然后再SWICH里面加入我们创建的业务开关。
保存之后,激活。注意TYPE为standby,表示准备中。
到这里我们的业务开关就创建好了。
下面我们在系统程序里面找个ADBC_DEMO程序做个增强静态增强和动态增强。看看会发生什么变化。
静态增强【声明】:
保存时,选择包:$ZSFW_TEST,刚才我们在业务开关里面填写的包。
SFW5 激活我们的业务框架开关
这时候执行ADBC_DEMO,系统将执行我们的静态增强的代码。
2.但是我们把刚才的静态增强删除,重新新增一个动态的增强【代码】。
这个时候F8,系统没有执行这段代码。
这时,我们到SFW2里面把开关变成激活如下图:
这个时候,动态增强被执行了。
总的来说,【声明】和【代码】受到到业务开关里面TYPE影响。【声明】无论TYPE是否为ACTIVATION都会执行。而【代码】里面的只有ACTIVATION才会执行。
当然如果你的代码没有启用业务框架开关,这里就没有啥区别了。