一.预留抬头增强
背景:项目中要求对MB21建立的预留抬头成本中心进行校验,如下图,需要屏幕增强:
1.我们通过F1发现,抬头的成本中心字段在SAPLKACB这个程序的1001屏幕中,如图,双击屏幕号进入:
2.点击子例程,对函数组KACB的子例程进行查找,如图:
3.很容易就查询到CUSTOMER_EXIT字样的子例程,分别代表屏幕的PAI/PBO用户屏幕增强:
4.我们这段增强是在屏幕输入的时候进行判断,所以需要增加在customer_exit_pai模块中,查找到屏幕出口CALL CUSTOMER-FUNCTION ‘002’,如图:
5.通过查找表MODSAP得到增强名,我们需要在CMOD中创建自定义增强项目ZSY_MB21并将查询到的增强放入组件,并激活。
6.因为此增强点涉及到多个标准程序的复用,所以需要限制Tcode,如下图
7.在增强点处理完之后,激活并测试,发现符合需求。
二.预留明细增强
背景:要求库存地点增加必填校验,同时不同条件的物料移动状态不同。
1.F1查询到行项目在程序SAPMM07R屏幕0521中
2.重复使用刚才的出口增强查找方法,查询到了一个增强点MM07RFBO,测试发现此增强点是预留保存的增强位置;所以不适用
3.我们查询第三代增强BADI,通过查找类CALL METHOD cl_exithandler=>get_instance,查询到BADI:MB_RESERVATION_BADI
4.使用SE18进行查看,根据接口的定义,大致是数据进行检查和修改,我们激活这个BADI进行测试
5.创建实施ZEWM_MB_CREATE_RESER
6.构建类ZCL_IM_EWM_MB_CREATE_RESER,上面的方法是数据修改,下面的方法是数据检查,分别对应我们需求的修改移动状态和库存地点必填
7.写入代码,激活进行测试
8.校验生效,则增强位置是OK的
需要注意的是MB21/MB22是同一个程序,所以他们的增强点复用的,所以在代码中需要限制TCODE