zoukankan      html  css  js  c++  java
  • BW与第三方BI接口设计与实现:APD、Open Hub、RFM

     

    最近公司新上了国内某CRM系统,SAPCRM也光荣下线了

    但是紧接着就出现了一些需求,CRM自带一款小型BI,需要一些SD的数据,但是把R3的数据给他们进行计算的话,不仅复杂、数据海量,而且还很担心数据会和BW不一致,所以经过探讨,决定数据从BW出,然后传给他们。

    基本流程Query->DSO->Open hub(DB Table)->RFM

     

    于是乎,凑着他们这几天不过来烦我,先做个DEMO,以后说话也有底气~哼哼~~~~

     

    问题就来了。首先数据再Query里,取Query数据并不复杂:

    1、使用APDRSANWB,新建一个GeneralApplication

     

    2、根据业务逻辑建Query

    由于业务逻辑比较复杂,需要显示每个月的月基本费,而月基本费本身又会参照月份,进行比较,所以,这个月份不能屏幕输入(屏幕输入一个月还行,但是N个月就没办法处理,也没办法每个月都做个变式交给APD去跑)。只好写死在列里,每次做一年的,也还好,十二行而已。。。

     

    但是怎么从十二行转换成两个字段(月份、月基本费值)

     

    SAP想的还是很周到的,每一行Query的数据,都可以通过例程去计算,这就解决了问题。

     

    整个流程是这样的:

     

    3、做DSODSO一定要是直接写入的,设计好Key fieldsData Fields(这个还挺重要的,和业务关系很大)

     

    4、配置下例程的Source FieldsTargetFlds,然后开始写代码(和转换里的历程类似,不过思路要清楚,这可是真对报表里看到的每行数据做的处理)

     

     

    5、配置下例程到DSOAssignment,类似于Update Rule

     

     

    6、在DSO里,选择Overwrite Complete Content of the DSO,这样每次更新报表,数据就全部更新(人家会自己帮你删干净)

     

     

    7、配置Open Hub,选择Destination TypeDatabase Table(这里有个Third-Part Tool,需要在SM59里配置RFC链接,没试过),然后勾上Deleting Data from Table,每次都删掉旧数据,类似于Full上载,下面我选择的是Semantic Key,这样就可以在Field Def里面配置Key Field,选Technical Key的话,就比较类似DSOLog表,会有Request ID、RECORD等等,这些会作为是Key Field

     

     

    8、做转换、DTP

     

    9SE37,做RFM,很简单,就是取了/BIC/OHZVSD_H01的内容,传到参数table里。

     

    SELECT * FROM /BIC/OHZVSD_H01 INTO CORRESPONDING FIELDS OF TABLE TABLE_YJBF WHERE SALESEMPLY = I_SALESEMPLY AND CALMONTH = I_CALMONTH.

     

    10、做进程链,ABAP Program Variant,Program Name RSAN_PROCESS_EXECUTE,把APD的技术ID配置到Variant里。然后把DTP加在下面,over。。。

     

     

     做好的APD如何通过处理链达到日常调度的效果呢?

    首先,在处理链中加入节点ABAP程序。其次,输入程序名:RSAN_PROCESS_EXECUTE,事先需建好所需调度的处理链的变式,即可。
     
    如果还需要在APD完成后继续执行DTP,那么需要将APD执行单独制作一条处理链。
     
    再建一条新链,将APD执行作为节点插入,再执行后续的DTP。否则,APD还在运行的时候就会开始跑DTP,导致空数据上载的现象。

    每个apd开始的query只能输入一个变量来,有没有办法可以动态改变开始输入的query变量值?

    动态的话 你就把QUERY里的变量做到CMOD里去 STEP = 1

    11、自己写了段JCO做测试

     

    没啥技术含量,不就是个玩儿~~~SE37里面的执行没啥两样。。

     

     

     

     

    续:原来的方案,是摸着石头过河的作品,真正用起来,才发现数据每次都会被冲掉,想要存一下,就使用了一层DSO,进行展现和数据处理。

     

    可是这层DSO总会有新的需求,而进行改变,所以就又加了一层写优化的DSO,来专门存储历史数据。

     

  • 相关阅读:
    C#中的global::system***命名空间别名限定符
    返回一个整数数组中最大子数组的和
    敏捷开发概述
    单词查找排序输出
    关于电梯调度的设计
    关于电梯调度的一些想法
    C#中抽象类和接口的区别
    SharePoint2010列表表单:用后台代码生成表单
    外刊IT评论:远离.net
    程序员:编程给你现实生活带来了哪些坏习惯
  • 原文地址:https://www.cnblogs.com/hanmos/p/2668068.html
Copyright © 2011-2022 走看看