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

[经验分享] 【转】SAP BW 顾问靠手 — SAP中的例程

[复制链接]

尚未签到

发表于 2015-9-18 09:07:19 | 显示全部楼层 |阅读模式
  什么是例程(Routine)?
  例程就是我们可以自己定义的程序代码。通过程序代码来完成我们的需求,因为业务是千变万化,如果想让产品能跟随上业务的脚步,就必须要有非常灵活的功能来补充。大家都知道软件产品都是通过代码来编制出来的,所以这里的例程是用最灵活的代码来进行补充,以达到完成客户灵活的业务变化。当然在BW模块中,代码的编写只是其中一个小的功能,不像ABAP顾问,主要是通过编程来实现需求。BW顾问注重的是建模,性能,是完成数据仓库,分析数据等等。
  在“转换”中,最重要的有三种类型的例程,开始例程,转换例程及结束例程;此外还有专家例程,反向例程。
   DSC0000.png
   DSC0001.png
   DSC0002.jpg
  开始例程:开始例程在每个数据包开始进行转换时运行。开始例程没有返回的值,它直接对数据包进行计算、修改或删除等操作,将操作的结果直接保存在数据包中进行后续的转换步骤。当然,开始例程也可以访问和操作SAPBI 系统中的其他数据库表。
  转换例程:则是在每笔数据传输过程中,对数据进行的一个转换,例如数据根据条件进行的匹配转换。当在每个字段的详细规则中,选择例程的规则类型就会弹出对话框来贴些转换例程。
  结束例程:结束例程对经过转换规则转换后的数据进行操作,它操作的是一个与目标对象字段结构一致的表结构。与开始例程一样,它也是逐个数据包进行处理的。在结束例程中,可以进行各种数据的操作,比如,删除不需要的数据、进行数据质量检查等。
  专家例程 : 专家例程是系统提供的进行数据转换的另一个选项,这一类型的例程较少使用。一般只在SAP BI 提供的标准函数不能满足转换需要的时候,才使用专家例程。在已知道数据库表逻辑时,出于提高性能的考虑,也可以使用专家例程而不使用图形界面。
  专家例程还可以更方便地将一条长记录分成多条短记录。使用专家例程可以编写系统提供的规则类型以外的任意转换,这时需要自定义写入数据加载日志的信息。一旦为一个转换创建了专家例程,系统会删除同一转换内已经定义好的其他转换规则。
   DSC0003.png
  反向例程 :在上图中没有标识出来,它将目标对象在运行报表时的选择条件和输出字段转化为对源对象的选择条件和输出字段的要求。
  反向例程只在两种情况下使用。
  1) 如果为虚拟信息提供者定义了例程,出于性能方面的考虑,可以使用反向例程。由于虚拟信息提供者本身并不存储数据,只在运行报表时直接到源系统读取数据,转换中的例程可能使报表的选择条件与输出字段与源系统不存在直接的对应关系,因此有必要把这些信
  息通过反向例程传给源对象。
  2) 当使用SAPBI 的报表跳转功能,从SAPBI 系统跳转到其他SAP 系统的事务处理界面时,如果数据是经过例程转换的,需要使用反向例程将报表中相应的信息返回给其他的SAP 系统。
  在这两种情况下,如果不使用反向例程,系统选择源对象所有的值。
  在代码*$*$ begin of global …和*$*$end of global ...之间输入用户的数据定义。用户可以使用两种方式声明数据:
  1 )使用语句'CLASS DATA'进行全局数据声明。用这一方法声明的数据在整个数据请求
  中都有效。
  2) 使用语句'DATA'进行全局数据声明。用这一方法声明的数据只在当前的数据包中都
  有效。
  全局数据声明使不同的例程之间共享数据成为可能。例如,可以在例程中使用其他例程
  的中间计算结果,或者在稍后再次调用同时例程时重用例程的数据。
  下面分别给出一个开始例程,传输例程及结束例程的应用场景及代码实现,如下:
  1.开始例程程序范例及场景:
  在数据传输伊始就需要删除AAA工厂数据,则可以在传输例程中写入如下程序:
*$*$ begin of routine - insert your code only below this line        
"删除AAA工厂
DELETE SOURCE_PACKAGE WHERE /BIC/ZPLANT = 'AAA'
*$*$ end of routine - insert your code only before this line         
2.转换例程应用:
    在数据传输过程中需要补充物料前导零,则在信息对象例程中加入以下代码即可。
*$*$ begin of routine - insert your code only below this line        
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT = SOURCE_FIELDS-MATNR
      IMPORTING
        OUTPUT = RESULT.
*$*$ end of routine - insert your code only before this line        
  
  3.结束例程应用:
  如果数据源的结构是一个扁平化结构,现在需要将其拆分成多行,例如结构源数据是
  办事处 一月份销量 二月份销量 三月份销量...
  而目标的结构为 办事处 月份 销量;则就可以在结束例程里做文章了;示例代码如下:
  先在开始例程中定义一个与源一模一样的内表,并且将源值赋给这个内表,代码如下:
*$*$ begin of routine - insert your code only below this line        *-*
... "insert your code here
ITAB [] = SOURCE_PACKAGE [].
*$*$ end of routine - insert your code only before this line         *-*

然后在结束例程中,在写入以下程序:
*$*$ begin of routine - insert your code only below this line        *-*
... "insert your code here
REFRESH RESULT_PACKAGE.
DATA: WA_RESULT TYPE _TY_S_TG_1.
LOOP AT ITAB INTO WA_ITAB.
  WA_TG-/BIC/ZSM_OFF = WA_ITAB-ORG_ID.
*****1月
  WA_TG-CALMONTH2 = '01'.
  WA_TG-/BIC/ZSM_BPQTY = WA_ITAB-M1.
  APPEND WA_TG TO ITAB_TG.
****2月
  WA_TG-CALMONTH2 = '02'.
  WA_TG-/BIC/ZSM_BPQTY = WA_ITAB-M2.
  APPEND WA_TG TO ITAB_TG.
****3月
  WA_TG-CALMONTH2 = '03'.
  WA_TG-/BIC/ZSM_BPQTY = WA_ITAB-M3.
  APPEND WA_TG TO ITAB_TG.
ENDLOOP.
LOOP AT ITAB_TG INTO WA_TG.
  MOVE-CORRESPONDING WA_TG TO WA_RESULT.
  APPEND WA_RESULT TO RESULT_PACKAGE.
ENDLOOP.
*$*$ end of routine - insert your code only before this line         *-*

运维网声明 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-115189-1-1.html 上篇帖子: [SAP ABAP开发技术总结]选择屏幕——SELECT-OPTIONS 下篇帖子: 一个完整的SAP RFC调用接口封装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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