BADI RSU5_SAPI_BADI和用户出口RSAP0001同时存在于ERP系统中,按照ABAP语言的发展方向来看,该BADI的主要作用是SAP准备用来替换用户出口RSAP0001的,但是目前所有SAP官方的材料中并没有提及这一点,也就是说用户既可以使用该BADI,也能使用原先的用户出口RSAP0001。
1.对象方法
与用户出口RSAP0001包含4个功能函数对应到4种不同数据源做法不一样的是,BADI RSU5_SAPI_BADI本身只包含了两个方法:第一个方法是DATA_TRANSFORM,主要为交易数据、主数据属性和主数据文本数据源服务;第二个方法是HIER_TRANSFORM,主要为层次结构数据源服务。但是和用户出口比起来,BADI又没有太大的变化,如果需要切换,则可以不进行任何代码的调整。
相对于用户出口,DATA_TRANSFORM方法去掉了两个参数:I_ISOURCE和I_CHA-BASNM,因为这些对象能够从数据源的名称中派生出来,其他的参数见表4-1。
表4-1 DATA_TRANSFORM接口参数
但是相对于用户出口,HIER_TRANSFORM的变化就大得多。去掉了I_S_HIEBAS,因为信息对象能够从数据源的名称中派生出来;同时灵活的层次结构中的I_S_HEADER3、C_T_HIENODE3、C_T_HIEINTV3被取消了,因为BADI被设计为不支持灵活的层次结构加载,只能在BW系统中对信息对象进行直接更新,其他的参数见表4-2。
表4-2 HIER_TRANSFORM接口参数
2.优缺点比较
在以往的项目上,用的更多的是用户出口,但是笔者建议在后续如果还需要对数据源进行增强,则更多地使用BADI的方式。
BADI的优势在于,能够为每一个数据源创建单独的实施,特别是在大的项目团队一起工作时,这点在2.2.3节中已经探讨过。另外一个优势在于,BADI是使用面向对象的ABAP OO方式进行编写的,符合未来的发展趋势。
3.实施步骤详解
假设有如下需求,需要对ERP系统中所有工厂的配置进行检查,查看是否允许负库存,同时需要通过工厂得到对应分配的公司代码。因此,需要在数据源0PLANT_ATTR的提取结构BIW_T001WS上增强字段XBKNG和BUKRS,如图4-41所示。
图4-41 数据源抽取结构增强
在添加附加字段后,按照3.3.3节中介绍的方法修改提取结构中的隐藏字段,本处不再赘述。
完成上述工作后,实施客户化的BADI代码,步骤如下。
第1步:输入事务码SE19,进入增强实施界面,在屏幕的下半部分可以看到如图4-42所示的界面。
(www.daowen.com)
图4-42 BAdI增强实施界面1
第2步:在BAdI Name中,输入系统自带技术名称RSU5_SAPI_BADI,单击“Create Impl.”按钮创建一个新的实施,如ZRSU5_SAPI_BADI,如图4-43所示。
图4-43 BAdI增强实施界面2
第3步:确定后,进入实施代码的详细页面,在该页面需要输入实施的简短描述,如这里输入“对数据源进行增强”,如图4-44所示。
图4-44 BAdI属性维护界面
第4步:单击“Interface”标签页,可以看到在新建的实施中,系统自动包含了两个方法类,第一个适用于主数据属性、文本以及交易数据,第二个适用于主数据层次结构的增强,如图4-45所示。
图4-45 BAdI增强接口界面
第5步:由于本例是主数据属性,因此需要双击“DATA_TRANSFORM”进入代码编辑界面,如图4-46所示。
图4-46 DATA_TRANSFORM代码编辑界面
由于本方法的输入和输出同RSAP0001中的函数没有明显的变化,因此代码本身和退出函数相比也无太大变化,以下是示例代码。
执行上述代码后,使用RSA3数据源抽取测试工具查看到数据源0PLANT_ATTR抽取到的数据,如图4-47所示,其中最后两列是我们添加并且通过BAdI代码进行内容填充的字段。
图4-47 数据源抽取测试结果界面
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。