第三代增强Enhancement Spot(实例)
业务需要:
MIGO事务代码,录入采购订单后,行项目详细信息中,增加一个分页签,分页签中增加输入框,保存按钮上增加保存至自建数据库表。
业务模拟:
1、SE24查找MIGO业务相关的BADI清单:
(1)使用SE24跟踪MIGO中的BADI,考虑可能需要的BADI在:
输入事务代码MIGO回车后:
MB_MIGO_BADI、MB_MIGO_ITEM_BADI、GOS_SRV_SELECT、BADI_LAYER、BADI_MATN1、
输入采购订单回车后:
OIB_QCI_DET_DEF、OIB_QCI_EXTERNALFUNC、GOS_SRV_SELECT、
(其他后续步骤与我们需要的业务不符合,故不记录后续出现的BADI)
(2)使用SE18查看上述BADI的描述
MB_MIGO_BADI:外部详细子屏幕的 MIGO 中的BADI
2、SE18查找BADI下的Interface、method
PBO_DETAIL\PAI_DETAIL与屏幕有关的方法。在SE18下直接点击上方:实现--->创建--->保存,之后提示如下:
此时可以不保存并退出该操作页面,重新进入SE18首页:
SE18进入第一个分页后可知,该增强点是由标准的BADI(MB_MIGO_BADI)中移植而来的。
也有人将ENHANCEMENT SPOT称为第四代增强。(也有人认为是基于BADI的,也是三代增强)
3、SE18查看增强点
在上面的步骤中知道了该BADI有enhancement spot,返回SE18首页选择“enhancement spot”点击查看增强点相关的内容:
可以点击左侧definition(定义)展开,查看该BADI定义下对应的接口及方法:
基于当前的definition(定义)查看哪些实现已经定义了:
可以引用该增强点下的系统范例
增强点(Enhancement spot),还是在SE18(也可以SE19)中查看(输入增强点):
4、创建增强点的实现
(1)SE18(专门查看definition)上图选中BADI,右击选择“创建”:
(2)也可以使用SE19专门创建Implement的事务代码,输入增强点,点击实现,填写增强点对应的实现名称和文本:
点击确认后,再选择增强点的定义definition(即在该增强点下包含的哪个definition需要创建实现,选择BADI定义为:MB_MIGO_BADI),再输入definition对应的需要创建的实现:
点击确认或回车后,查看增强实现,并执行类,输入执行类CL_EXM_IM_MB_MIGO_BADI(上文中系统中已有的实例):
若出现以下界面则选择“copy sample Class”:
点击保存,则可带出该类下的方法:
且刚创建的实现显示为“将不调用实施”(需要后续**):
5、**增强实现
点击**,全选后回车(全部**):
**后该实现显示“执行已被调用”:
若系统中有多个“执行已调用”的实现,导致不能**时(若能顺利**,则表示无冲突),则需要将不使用的改为“执行未调用”状态:
6、验证实现
使用事务代码MIGO查看该实现的系统实例CL_EXM_IM_MB_MIGO_BADI的功能,输入PO回车后,出现“MIGO BADI(例子)”分页:
7、实例逻辑分析:
(1)、没有输入PO编号时,分页签不显示
(2)、分页签中包含一个屏幕界面,可以数据录入
(3)、点击MIGO中的check按钮时,有检查消息
(4)、点击保存时,分页签数据可以保存到对应数据库表中。
可以点击增强实现,或者SE19输入刚才创建的增强实现,查看方法下的增强代码:
点击执行类,查看下面的方法:
双击其中的方法可以查看增强代码及注释:
(由注释知道该方法注册一个分页签,分页签ID保存在CT_INIT中)
可以查看到方法中的参数:
注意:若同时使用该参数注册多个分页签,由于初始值相同,导致ID冲突,会使得增强实现失败。故需要增加分页签时使得初始的分页签ID不同,冲突时即两个实现中的GF_CLASS_ID初始值相同),冲突时进入MIGO事务后会出现BADI登记同名的报错信息:
附:部分方法解析
方法1-INIT:注册分页签ID
方法2-PBO:
方法3-PAI:
可以查看赋值的参数:
表示若该参数值为‘X’,对应的方法LINE_MODIFY将被执行。
方法4-LINE_MODIFY:略