设为首页 收藏本站
查看: 823|回复: 0

[经验分享] 在SAP BW中使用ABAP

[复制链接]

尚未签到

发表于 2015-9-17 11:37:51 | 显示全部楼层 |阅读模式
  前言
  本文的目的是讲述如何在BW中使用ABAP编程。在每一个项目中,正确使用ABAP编程会对正确的业务建模起到积极作用。在设计和蓝图阶段,一个核心的功能流程是类比于如何在BW中完成类似于R3中的业务流程。SAP提供了多种路径来实施这样的业务流程。本文就会讲述哪里、如何在BW中进行ABAP编程。同时,也会给出一些基本的SAP推荐,对于如何改善ABAP代码的执行。文中的例子会包括R3数据源的变换,创建通用的R3数据抽取器。在BW中,大部分对象都是内部关联的,我们可以在多个目标数据中共享数据。因此,我们需要知道我们是如何处理数据、更新记录和在哪里使用ABAP程序控制这些更新。

  在BW中我们可以用ABAP作什么

  在SAP R3和BW之间,对于我们如何使用ABAP程序是有明显不同的。要理解这样的开发会给我们带来什么,我们先看看BW的大致结构。总体来首,我们是处理一些对象,这些对象是基于某种配置,比如ODS和InfoCube的连接,或者对源系统、数据源的创建。通常我们不会构造屏幕程序和多个用户接口去获得其他的功能,这是在BW中的开发与R3中的显著不同。在BW中,我们使用ABAP来按照要求转换数据,也可以在抽取、更新时进行数据处理。

  
     Technical Area
   
     描述

   
     BEx User Exit
   
     允许为了key figure相关计算在运行时创建和激活变量。这个用户出口会在每次BEx执行时被调用。
   
     R/3 User Exit
   
     这个用户出口是在R3的CMOD中定义,可以在要提取结构中填充其他的字段。我们也可以创建额外的业务逻辑在数据传输至BW前。
   
     BW Transfer rules
   
     这些规则在数据从R3传输到BW时被运用,或者在BW中导出数据源和创建InSource时。

   
     BW Update Rules
   
     这些规则在数据被更新至目标数据时调用。无论是ODS或者是InfoCube,每一个更新结果都是一条更新规则的执行结果。

   
     BW Start Routines
   
     BW更新规则中的Start routine是用来对所有数据起作用的,并不是像某条更新规则只是对某个data element起作用。

   
   
  在R3中,为BW可以做的ABAP编程选项

选项1:  
  为已有的输出结构添加字段;
  对于这些字段运用ABAP逻辑。
  选项2:
  为数据集创建一个表或者视图;
  在RSO2中创建一个通用的抽取器;
  或者运用自定义ABAP程序去填充表内容或者通过function module、user exit在抽取时填充数据字段或者修改数据。
  For选项1:
  这是最直接的方式在ABAP中对于数据进行修改,而不通过标准的抽取器。我们就使用最基本的概念,为了额外的字段去填充结构。当我们对要输出的结构增加新的字段或者要激活时,我们可以在用户出口中看到这些字段。当我们为导出结构增加了字段之后,是可以在BW目标系统中看到的。一旦这些字段被添加至输出结构,到RSA6中,Post Processing  Datasources可以查看修改的数据源。双击数据源,确保新增加的字段没有被隐藏。否则,新添字段不会在新导出BW系统中被看见。在R3中,如何激活这些数据字段在R3到BW的用户出口中。进入CMOD,找到自己的BW project,这个项目可能是在用户命名空间中的,找到正确的项目后,选择“display components”,然后F7。会显示出所有的BW用户出口组件,你会发现有四个用户出口:

  
     User Exit
   
     Description
   
     SAPLRSAU_001
   
     Transactional data user exit
   
     SAPLRSAU_002
   
     Master Data User exit
   
     SAPLRSAU_003
   
     Optional
   
     SAPLRSAU_004
   
     Optional
   
  这些用户出口的配置可能是系统与系统间是不同的。举例来说明,我们有一个数据抽取器用来从R3中抽取购买订单数据,假设我们要添加一些字段到 2LIS_02_ITM输出结构。
  我们这时就需要用代码填充这些字段,然后在BW中重新初始化。双击 SAPLRSAU_001会打开 SAPLRSAU_001程序的顶层。然后点击包含 ZZRSAU01。这里就是写自定义逻辑的地方。当你开始数据抽取,输出结构被标准抽取的初始数据填充时,你会发现这时可以向每一条记录添加字段。在这个用户出口中,你可以循环访问所有数据然后添加相应字段。到最后一步时,可以把新的数据字段添加到抽取出结构中。

  For选项2:
  进入SE11,查看View,输入命名Z****,创建它;
  当要求输入development class时,输入正确的development class然后保存,然后会进入view的初始定义界面;
  添加需要的字段,同时补充表名;
  创建一个自定义程序区填充这些base table;
  当结束激活以后,可以查看在view中有多少条数据被返回;

  当然view被创建完毕后,可以去RSO2中查看;
  在RSA3中可以通过抽取检查,来查看新的数据源;
  你可以双击RSA3带有view定义的输出。

  
  如何改善性能

  利用选择条件,尽量select具体的字段名;
           Not recommended:-
                Select * from /bi0/mcustomer.
                 Check : soursystem = ‘I2P’ and objvers = 'A'.
                 Endselect.
  
         Recommended:-
                Select * from /bi0/mcustomer where soursystem = ‘I2P’ and  objvers = 'A'.
                Endselect.
   
  采用系统自带的聚合函数,而不是通过ABAP代码去自己实现;
    Not recommended
              Maxamount = 0.
             Select * from /bic/mzordods where soursystem = ‘I2P’.
               Check mzordods-zamount>maxamount.
               Maxamount = mzordods-zamount.
              Endselect.
   
  不要每次通过select语句查询一条记录然后插入internal table,推荐一次性将所有要查询的记录全部插入 ;

    Not recommended:-
  Refresh : itab_cust_t
  select *
            from /bi0/tcustomer
            into itab_cust_t
  append itab_cust_t.
  clear itab_cust_t.
  
  Recommended:-
   Refresh : itab_cust_t
  select *
            from /bi0/tcustomer
            into table itab_cust_t
   
  在对内表进行查找时,使用二分查找方法;

    Not Recommended
  Read table itab_cust_t with key soursystem=’I2P’.
  
  Recommended
  Read table itab_cust_t with key soursystem=’I2P’ binary search.
   
  在操作两个内表时,尽量使用append插入行,当然这两个内表的结构是要相同的;

    Not Recommended
  Loop at itab_cust_t.
  Append itab_cust_t to itab_cust_t1.
  EndLoop.
  
  Recommended
  Append lines of itab_cust_t to itab_cust_t1.
   
  使用表缓存,当如下情况时,表缓存会被忽略:
  1, select distinct
  2, select ... for update
  3, Order by, group by, having clause
  4, Joins
  使用FOR ALL Entries,系统会自动创建outer join,相应缺点有:
  1,雷同数据会被自动清除掉,如果不希望这样,应该在select中加入唯一key值查询;

  2,如果基于FOR ALL Entries查询的表是空的,所有行都会被插入目标表;
  3,如果用于FOR ALL Entries的表记录很大,这种情况下性能是下降而不是提升的。

    Not Recommended
  Loop at itab_cust_t.
  Select single * from /bi0/mcustomer into itab_cust_m
  Where soursystem= itab_cust_t-soursystem.
  Append itab_cust_m.
  EndLoop.
  
  Recommended:-
  Select * from /bi0/mcustomer appending table itab_cust_m
  For all entries in itab_cust_t
  Where soursystem= itab_cust_t-soursystem.
     使用合理的where语句。当一个表有多个索引时,where语句应该以索引顺序书写;

使用ABAP排序而不是Order By。收集完所有记录,在内表中进行排序;

  
  系统所提供的进行性能分析的工具:
  SE30,对ABAP程序进行全面分析,无论是不是数据库访问的;
  ST05,进行SQL级别的分析。
  限制

  通常来说,当加载程序以后,在运行时会消耗额外的处理器时间和内存。所以程序的性能也会受到硬件的限制。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-114902-1-1.html 上篇帖子: SAP之SD主数据 下篇帖子: SAP屏幕设计器专题:拖拉控件的强大(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表