所有SAP系统提供的标准数据源和自定义的一般数据源都能够通过用户出口RSAP0001实现扩展和增强。SAP系统数据抽取过程是先按照既定的逻辑从ERP系统中获取数据,然后将所有符合条件的数据进行分包处理,以便用户能够在用户出口中对每包数据进行逐条的处理。这就意味着,用户不仅可以处理一条数据中的某个字段,也能对整包数据进行插入、删除和修改操作。这样的操作虽然也可以在BW系统中转换的开始例程完成,但是传输不必要的数据到BW系统对于系统和网络资源也是一种浪费。
在项目中用户通常会遇到这样的问题,实现既定的目标,到底是在ERP系统中实现好,还是在BW系统中实现好。通常情况下,看起来逻辑可以在这里实现,也可以在那里实现,以下就是一些示例说明哪些因素应当在做决定时考虑在内。
1.对于字段的扩展
通常来说,对于需要增加的字段的相关逻辑和数据一般都存储在ERP系统中,因此可以很快地判断出,在不严重影响ERP系统性能的前提下,这部分增强应该放在源系统中实现。
2.权限校验
通常来说,为了避免BW系统超级用户对于ERP系统敏感数据的访问,这一部分增强应该在源系统中实现,因为数据一旦进入BW数据仓库系统中,则这些用户理所当然地就对这些数据具有访问权限。
3.转换
BW通常都需要进行一些存储上的转换,如对于物料的显示方式。这样的转换建议在BW系统中实现,因为一旦在ERP系统中实施了相应的转换,则对于别的BW系统来说,数据源就不再具有之前的格式和灵活性了。
下面举例说明如何在抽取器增强中对3.2节所新建的一般数据源ZDS_DEMO_TCURR进行增强,也就是将日期转换为正常日期显示,将比率(从)字段和比率(到)字段填上应有的内容。
1.如何使用该用户出口
第1步:需要告诉系统用户即将开始启用这个出口,因此必须先新建一个项目,并且将增强RSAP0001包含到项目中。使用事务码CMOD新建一个项目,如项目技术名称定为ZBW,如图4-16所示。
图4-16 新建项目ZBW
第2步:在弹出的对话框中输入项目名称,如“BW系统对于数据源的增强”,单击“Enhancement Assignments”按钮,向新建的项目中增加出口RSAP0001,只需在第一行第一列输入RSAP0001即可,如图4-17所示。
图4-17 项目中的增强
第3步:单击“组件”按钮,查看分配到该出口的相关功能模块函数,RSAP0001包含4个功能模块,如图4-18所示。
图4-18 RSAP0001中的4个功能模块
这4个功能模块函数分别是:
(1)EXIT_SAPLRSAP_001交易数据数据源增强程序
①输入参数
②输出参数
(2)EXIT_SAPLRSAP_002主数据属性数据源增强程序
①输入参数
②输出参数
(3)EXIT_SAPLRSAP_003文本数据源增强程序
①输入参数
②输出参数
(4)EXIT_SAPLRSAP_004层次结构数据源增强程序
①输入参数
②输出参数
在本例中,因为创建的数据源ZDS_DEMO_TCURR是交易数据源,因此将采用EXIT_SAPLRSAP_001作为数据源增强的功能模块。
第4步:要实施的数据源功能增强的代码修改点并不直接存在于函数EXIT_SAPLRSAP_001()中,因为该函数是存在于SAP的命名空间中的(用户程序命名空间以“Y”或“Z”开头)。但是,此处代码修改存在于INCLUDE ZXRSAU01中,这个INCLUDE程序属于用户命名空间,用户只需要双击该对象,就能顺利地创建一个INCLUDE程序,任何时候,只要调用功能模块,这个INCLUDE程序就将被调用,从而达到既定增强的目的。
第5步:在CMOD初始界面单击“激活”按钮,激活新建的项目ZBW,否则即使经过反复的测试,仍然会发现代码不能被调用,而这样的案例经常出现在实际的实施项目的过程中。
2.用户出口EXIT_SAPLRSAP_001对于货币换算数据源的增强举例
回到数据源ZDS_DEMO_TCURR,用户的目标是逐行地将抽取到的数据的字段进行转换和填充,因此需要如下代码来实现这个功能。
通过RSA3再次抽取数据源ZDS_DEMO_TCURR的测试数据就会发现,相关的数据字段FFACT和TFACT已经被填充了转换因子。
由于TCURF这些信息存在于ERP系统中,而ERP系统本身并没有提供相关的接口将TCURF的数据抽取到BW系统,因此这些增强只能在ERP系统中进行,而且由于数据本身条目数不是特别多,不会给ERP系统带来严重的性能问题,所以这里在源系统端对数据源进行增强。
3.标准数据源增加字段的处理
在实际的项目中,更多的情况是向标准的数据源中增加字段,然后调用代码段对新增的数据源进行处理。标准数据源的增强分为3种类型,即一般数据源增强、后勤数据源增强和其他数据源增强。其中,一般数据源增强包括对主数据的增强和对财务、成本、项目、设备等交易数据源的增强;后勤数据源增强主要包括采购、销售、库存等交易数据源的增强;其他数据源的增强包括FI-SL、CO-PA数据源的定制和增强。由于本书主要讨论涉及ABAP处理的内容,因此主要讨论前两种类型的增强。
(1)一般数据源增强
首先,假定已经在BCT中使用了事务码RSA5,激活了标准的数据源0FI_AR_4,要对数据源进行增强需要按照以下步骤进行。
第1步:扩展0FI_AR_4的抽取结构DTFIAR_3,增加字段SPART、类型SPART。使用事务码RSA6进入数据源列表,在目录SAP-R/3→FI→FI-AR-IO下找到数据源0FI_AR_4,如图4-19所示。
图4-19 SAP标准数据源层次结构
单击选中数据源后,单击“增强提取结构”按钮,此时系统弹出增强结构技术名称输入界面,如图4-20所示。
图4-20 增强结构技术名称输入界面
按<Enter>键进入增强结构维护界面,在“短文本”文本框中输入增强的说明,如“增加产品组”,在下面的列表中增加SPART字段,类型为产品组数据元素SPART,如图4-21所示。
图4-21 增强结构维护界面
单击“激活”图标,激活新增的附加结构,在弹出的开发类中选择自己的开发类,忽略系统的警告信息。返回数据源列表界面,此时通过双击数据源进入数据源信息显示界面,如图4-22所示。
图4-22 数据源信息显示界面
双击提取结构“DTFIAR_3”,进入数据源0FI_AR_4的提取结构,可以看到新增的字段附加到了结构的最后,如图4-23所示。
图4-23 数据源提取结构显示界面
第2步:设置数据源字段的属性。此时需要在数据源的设置中,将新增加的字段的“隐藏”属性去掉。在此返回数据源列表界面,选中数据源0FI_AR_4后,单击“修改”图标进入数据源的属性设置界面,此时的界面和图4-23所示的显示界面相同,但是在此处可以对字段进行修改和维护,如图4-24所示。
图4-24 数据源输出结构维护界面
从图4-24中可以看到,新增的字段SPART的“隐藏字段”和“仅在客户退出中已知的字段”都被默认的勾选了,为了让字段传输到BW系统,在此处将两个单选框去掉,否则该字段将不会出现在传输结构中,进而对BW隐藏。
第3步:在用户出口RSAP0001中使用EXIT_SAPLRSAP_001的包括程序ZXRSAU01对字段SPART进行程序代码的增强。
(2)后勤数据源增强
一般数据源的扩展主要针对非后勤交易数据和所有的主数据,但是项目中,后勤交易数据源的处理占据了主要的精力和工作量,后勤数据源是在后勤管理工作台LBWE中进行集中管理,这里以2LIS_13_VDITM为例说明后勤数据源的增强,具体步骤如下。(www.daowen.com)
第1步:进入LBWE后勤数据源定制主控室,在“13∶SD出具发票BW”下找到数据源2LIS_13_VDITM,如图4-25所示。
图4-25 后勤数据源定制主控室
单击数据源后面的“维护”图标,系统进入数据源的字段维护视图,如图4-26所示。
图4-26 后勤数据源的字段维护视图
在右上角的下拉列表框中,单击全部后面的按钮可以看到数据源的所有来源字段,如图4-27所示。
从图4-27中可以看到,所有的数据源字段来源于4个视图,即MCVBRK、MCVBRP、MCVBUK和MCVBUP,因此如果能够在这4个结构中找到需要的字段,那么需要做的事情就是从右边将字段选择到左边即可。这种系统自带字段相对于自开发字段的好处在于,系统自带字段的变更会作为增量写入到数据源增量队列中,进而抽取到BW系统。如果在这4个结构中不存在用户所需要的字段,如希望给销售开票行项目增加订单号以及订单行项目,则需要先修改对应的视图,增加相应的字段。因为要增加的是销售订单号以及销售订单行项目,所以在MCVBRP中增加字段。因此先退出数据源维护界面。
图4-27 来源字段
第2步:进入事务码SE11界面,在数据类型中输入“MCVBRP”,如图4-28所示。
图4-28 结构更改进入界面
单击“显示”按钮进入结构的显示界面,如图4-29所示。
图4-29 主结构显示界面
单击“Append Structure”按钮,进入附加结构维护界面,如图4-30所示。说明,如果之前没有附加结构,则系统直接进入如图4-31所示的附加结构创建界面。
图4-30 附加结构列表界面
图4-31 附加结构创建界面1
单击“创建”按钮进入新附加结构的技术名称输入界面,输入“ZZDEMO”,如图4-31所示。
按<Enter>键进入下一屏附加结构维护界面。在该界面中,输入附加结构的文本描述,以及需要添加的字段“销售单位目标数量”和“目标数量计量单位”,如图4-32所示。
图4-32 附加结构维护界面2
以上设置完毕后,激活附加结构,返回结构显示界面可以看到,在结构MCVBRP的最后多了一个附加结构和两个附加字段,如图4-33所示。
图4-33 主结构显示界面
第3步:回到LBWE后勤数据源控制台,再次单击数据源2LIS_13_VDITM后面的“维护”图标进入到数据源维护界面。在右上角选择视图MCVBRP后,在右边最下面看到存在两个新增的字段ZZ_ZMENG和ZZ_ZIEME,如图4-34所示。
图4-34 后勤数据源提取结构查看
此时将右边的这两个字段使用系统移动功能移动到左边,可以看到右边的字段消失了,在左边的最下面出现了两个字段,如图4-35所示。
图4-35 从右边增加字段到左边列表后的界面
按<Enter>键确认后,系统弹出输入确认对话框,单击“是”按钮,如图4-36所示。
图4-36 信息提示界面
注意,此时系统可能出现错误提示,提示在系统的设置表和增量队列中还存在着数据,因此在进行后勤数据源的结构更改时最好先将设置表以及增量队列清空。新的抽取结构生成后,系统会自动将数据源设置为非激活状态,如图4-37所示。
图4-37 数据源维护界面
与其他数据源添加了字段之后需要对字段的“隐藏字段”和“仅在客户退出中已知的字段”属性进行设置一样,后勤数据源在增加了字段后,下一步也需要对输出结构进行设置。单击“维护”图标后的数据源名,进入数据源输出结构维护界面,如图4-38所示。
图4-38 数据源输出结构维护界面
由于此处的字段以“ZZ_”开头,因此字段会出现在最下面,将字段的“隐藏字段”和“仅在客户退出中已知的字段”取消勾选并保存,退出输出结构维护界面,回到后勤数据源主控室。此时可以发现,数据源2LIS_13_VDITM前面的状态标识从红色变成了黄色,如图4-39所示。
图4-39 数据源维护界面(未激活)
此时,只需要单击数据源后面的“未激活”图标,即可将数据源切换为激活状态,如图4-40所示。
图4-40 数据源维护界面(活动的)
第4步:在用户出口RSAP0001中使用EXIT_SAPLRSAP_001的包括程序ZXRSAU01对字段ZZ_ZIEME和ZZ_ZMENG进行程序代码的增强。
4.应用层次结构出口增强
一般来说,ERP提供了标准的层次结构数据源,用于将ERP中的层次结构传输到BW系统中,如成本中心、利润中心、WBS元素等都有自己的层次结构数据源,大多数时候这些数据源本身就够用了,不需要调用层次结构增强函数EXIT_SAPLRSAP_004()进行增强。正因为这个增强在项目中几乎不被用到,所以在此借用数据源0COSTCENTER_0101_HIER进行增强的演示和说明。
假设有以下需求,由于ERP系统中有众多的成本中心,并且根据成本中心的编号和描述,难以直接知道成本中心所处的层次,如有成本中心K3001处于层次结构的第三层,那么用户可能希望将03这个信息也加入到成本中心的描述中,语句如下。
由于在表C_T_HIENODE中包含了层次结构所有的节点以及节点在层次结构中的位置关系,在表C_T_FOLDERT中包含了层次节点的描述,因此在上述代码中根据C_T_HIENODE的层级信息修正C_T_FOLDERT中的描述信息。
5.实施一般层次结构抽取器
ERP系统提供的一般数据源制作工具并不能直接制作层次结构数据源,为了解决这个问题,有两个办法:一是将ERP中的层次结构关系二维表抽取到BW系统,在BW系统中通过ABAP代码的方式直接进行层次结构的生成;二是采用以下步骤,通过增强的方式完成。
假如用户需要生产层次结构的信息对象叫作DOBJ。
第1步:根据DOBJ创建一个信息对象DEXP。
第2步:将DEXP生成输出数据源。
第3部:将数据源DEXP_HIER连接到目标信息对象DOBJ。
第4步:在ZXRSAU04中编写代码对数据源DEXP_HIER进行处理。
第5步:在DEXP信息对象上创建一个含有一个节点的层次结构。
第6步:在数据源上创建一个信息包,用以加载数据。
第7步:执行信息包,上载层次结构。
作者还将在后续章节详细讨论如何实施该段ABAP代码,以及在BW系统中如何管理层次结构。
6.从BW系统向用户出口传递参数变量
在少数时候用户可能希望从BW系统传输一些参数到ERP系统中,以作为条件在用户出口中进行调用。例如,有些时间相关的主数据或交易数据需要在用户出口中使用BW系统传输过来的条件,则可以按照如下步骤进行实施。
第1步:向数据源的抽取结构中增加一个字段,如ZZ_AEDAT。
第2步:在数据源的后处理(RSA6)中,将该字段作为数据源的选择字段,这样在BW系统通过“复制元数据”和“激活”两个动作之后,在信息包中,用户就能看到这个选择条件了。
第3步:在数据表I_T_SELECT中,所有的选择条件都会从BW系统的数据包传输到ERP系统中,所以可以用“FIELDNM=′ZZ_AEDAT′”来读取选择条件,然后用该条件对数据进行选择和限制。
详细代码参见4.2.1节的功能函数ZDS_DEMO_FM_MBEW()中的部分代码。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。