zoukankan      html  css  js  c++  java
  • SAP BPC 清除CUBE 中的数据

    原理:先根据模型和查询条件取出数据,然后把金额设置为0,再写回CUBE.

    1.获取数据并清空金额

    *&---------------------------------------------------------------------*
    *& Form CLEAR_BPC_DATA
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *&      --> S_ENTITY 公司代码
    *&      --> P_YEAR   年度
    *&      --> P_MONTH  月份
    *&      --> P_CAT
    *&---------------------------------------------------------------------*
    FORM frm_clear_bpc_data  USING p_gt_input_entity LIKE gt_input_entity
                                    p_p_year  LIKE p_year
                                    p_p_month LIKE p_month
                                    p_p_cat   LIKE p_cat
                             CHANGING
                                   p_t_bpc_data TYPE ANY TABLE  .
    
      DATA: lt_axis_base TYPE ujo_t_query_dim, "每行是一个维度上的一组成员
            lt_axis      TYPE ujo_t_query_dim, "每行是一个维度上的一组成员
            ls_axis_t    TYPE ujo_t_members,   "成员表
    
            lt_cv_base   TYPE TABLE OF ujk_s_cv, "BPC Script Logic Current View
            lt_cv_final  TYPE TABLE OF ujk_s_cv, "BPC Script Logic Current View
            lt_cv_pkg    LIKE TABLE OF lt_cv_base,
            ls_cv        LIKE LINE OF  lt_cv_base,
            lr_bpc_data  TYPE REF TO data.
    
      FIELD-SYMBOLS <ft_pkg_data> TYPE ANY TABLE.
      CREATE DATA lr_bpc_data LIKE p_t_bpc_data.
      ASSIGN lr_bpc_data->* TO <ft_pkg_data>.
    
    * 准备不变的条件
      CLEAR ls_cv.
      LOOP AT p_gt_input_entity INTO DATA(lv_entity).
        ls_cv-dimension = 'ENTITY'.
        APPEND lv_entity TO ls_cv-member.
      ENDLOOP.
      APPEND ls_cv TO lt_cv_base.
    
    * 准备不变的条件
      CLEAR ls_cv.
      ls_cv-dimension = 'CATEGORY'.
      APPEND s_veson-low TO ls_cv-member.
      APPEND ls_cv TO lt_cv_base.
    
    * 准备不变的条件
      CLEAR ls_cv.
      ls_cv-dimension = 'TIME'.
      APPEND s_erdat-low TO ls_cv-member.
      APPEND ls_cv TO lt_cv_base.
    
    * 准备不变的条件
      CLEAR ls_cv.
      ls_cv-dimension = 'AUDITTRAIL'.
      APPEND 'INPUTM' TO ls_cv-member.
      APPEND ls_cv TO lt_cv_base.
    
    * 准备不变的条件
      CLEAR ls_cv.
      ls_cv-dimension = 'SCOPE'.
      APPEND 'S_NONE' TO ls_cv-member.
      APPEND ls_cv TO lt_cv_base.
    
    
    * 准备变化的条件
      lt_cv_final = lt_cv_base.
    
    
      CLEAR ls_cv.
      ls_cv-dimension = 'CATEGORY'.
      APPEND p_p_cat TO ls_cv-member.
      APPEND ls_cv TO lt_cv_final.
      APPEND lt_cv_final TO lt_cv_pkg.
    
      "执行查询
      TRY.
          cl_ujk_model=>get_dim_list(
            EXPORTING
              i_appset_id = gco_appset_id
              i_appl_id = gco_appl_id
              i_with_measures = abap_false
            IMPORTING
              et_admin_dim_list = DATA(lt_dim_list)
          ).
    
          DATA: lt_range TYPE uj0_t_sel,
                ls_range LIKE LINE OF lt_range.
    
          DATA(lo_query) = cl_ujo_query_factory=>get_query_adapter(
              i_appset_id = gco_appset_id
              i_appl_id = gco_appl_id ).
    
          LOOP AT lt_cv_pkg INTO DATA(lt_cv).
            "转换查询条件
            CLEAR:ls_range, lt_range[].
            LOOP AT lt_cv INTO ls_cv.
              ls_range-sign = 'I'.
              ls_range-option = 'EQ'.
              ls_range-dimension = ls_cv-dimension.
              LOOP AT ls_cv-member INTO DATA(lv_member).
                ls_range-low = lv_member.
                APPEND ls_range TO lt_range.
              ENDLOOP.
            ENDLOOP.
    
            lo_query->run_rsdri_query(
              EXPORTING
                it_dim_name = lt_dim_list      " BPC: Dimension List
                it_range    = lt_range         " BPC: Selection condition
                if_check_security = abap_true  " BPC: Generic indicator
              IMPORTING
                et_data = <ft_pkg_data>
              ).
    
            INSERT LINES OF <ft_pkg_data> INTO TABLE p_t_bpc_data.
            SORT p_t_bpc_data.
            DELETE ADJACENT DUPLICATES FROM p_t_bpc_data.
    
            LOOP AT p_t_bpc_data ASSIGNING FIELD-SYMBOL(<fs_bpc_data>).
              ASSIGN COMPONENT 'SIGNEDDATA' OF STRUCTURE <fs_bpc_data> TO FIELD-SYMBOL(<fv_signeddata>).
              CHECK sy-subrc = 0.
              <fv_signeddata> = 0.
            ENDLOOP.
          ENDLOOP.
        CATCH cx_root INTO DATA(lr_exception).
          MESSAGE |查询需要覆盖的BPC数据时报错{ lr_exception->get_longtext( ) },请联系管理员| TYPE 'E'.
      ENDTRY.
    ENDFORM.

    2. 写回CUBE

    *&---------------------------------------------------------------------*
    *& Form frm_write_into_bpc
    *&---------------------------------------------------------------------*
    *& text 写入BPC
    *&---------------------------------------------------------------------*
    *&      -->
    *&---------------------------------------------------------------------*
    FORM frm_write_into_bpc USING it_tab TYPE ANY TABLE
                                   i_proc TYPE char1.

      CLEAR: gt_message.
      DATA: lo_ujo         TYPE REF TO if_ujo_write_back,
            l_str          TYPE string,
            ls_wb_param    TYPE if_ujo_write_back=>gs_wb_param,
            ls_wb_status   TYPE ujo_s_wb_status,
            ls_work_status TYPE ujr_s_work_status,
            ls_audit       TYPE ujr_s_update_audit,
            lt_message     TYPE uj0_t_message,
            lr_data        TYPE REF TO data.

      FIELD-SYMBOLS: <lt_error_records> TYPE ANY TABLE.

      CREATE DATA lr_data LIKE it_tab.
      ASSIGN lr_data->* TO <lt_error_records>.

      CALL METHOD cl_ujo_wb_factory=>create_write_back
        RECEIVING
          ro_write_back = lo_ujo.

      ls_wb_param = cl_ujo_wb_factory=>default_wb_param).
      ls_wb_param-bypass_security = abap_true.

      TRY.
          CALL METHOD lo_ujo->write_back
            EXPORTING
              i_appset_id      = gco_appset_id
              i_appl_id        = gco_appl_id
              is_wb_param      = ls_wb_param
    *         it_records       = <fs_t_data>
              it_records       = it_tab
            IMPORTING
              es_wb_status     = ls_wb_status
              et_error_records = <lt_error_records>
              et_message       = gt_message.

          cl_ujk_logger=>log'提交记录: ' && ls_wb_status-nr_submit && '条, ' && '成功记录: ' && ls_wb_status-nr_success && '条' ).

          IF gt_message IS NOT INITIAL.
            CALL SCREEN 400 STARTING AT 2 ENDING AT 120 30.
          ELSE.
            IF i_proc = gco_update.
              MESSAGE s008.
            ENDIF.
          ENDIF.

        CATCH cx_ujo_write_back cx_uj_static_check  INTO DATA(lo_write).
          l_str = lo_write->get_text).
          MESSAGE l_str TYPE 'S' DISPLAY LIKE 'E'.
      ENDTRY.

    ENDFORM.

  • 相关阅读:
    cloud_config学习_2
    layui的tab和form冲突
    layui+beetl实现三级菜单
    postgreSQL官网教程_管理表、类型
    08、异 常&包
    07、面向对象特征之多态&内部类
    06、面向对象特征之继承
    04、面向对象
    03、数组&内存划分
    02、函数
  • 原文地址:https://www.cnblogs.com/JackeyLove/p/13929930.html
Copyright © 2011-2022 走看看