zoukankan      html  css  js  c++  java
  • BW通过函数调用Query,设置传入参数,动态设置输出维度

    REPORT zcfo_update_bs MESSAGE-ID zfi03.
    TYPE-POOLS: rrx1,rsrds .

    DATA: gt_return LIKE bapiret2 OCCURS WITH HEADER LINE .

    DATA:gs_repdir TYPE rsrrepdir,
         g_date    TYPE sy-datum,
         g_month   TYPE /bi0/oicalmonth,
         g_tlevel  TYPE /bi0/oirf_tlevel.
    DATA:g_request TYPE REF TO cl_rsr_request.
    DATA:g_dataset TYPE REF TO cl_rsr_data_set.

    DATA : gt_dim    TYPE rrx1_t_dim,
           gs_dim    TYPE rrx1_s_dim,
           gt_prptys TYPE  rrx1_t_prptys,
           gt_atr    TYPE  rrx1_t_atr,
           gt_mem    TYPE  rrx1_t_mem,
           gt_cel    TYPE  rrx1_t_cel,
           gt_con    TYPE  rrx1_t_con,
           gt_fac    TYPE  rrx1_t_fac.


    DATA:g_cx_message   TYPE REF TO cx_rsr_x_message,
         g_cx_root      TYPE REF TO cx_root,
         g_error_string TYPE string.

    DATA: gs_var  TYPE rrx1_s_var,
          gt_var  TYPE rrx1_t_var,
          gt_cell TYPE rrws_t_cell,
          gs_cell TYPE rrws_s_cell,
          gt_axis TYPE rrws_thx_axis_data,
          gs_axis TYPE rrws_sx_axis_data,
          gt_set  TYPE rrws_tx_set,
          gs_set  TYPE rrws_sx_tuple.

    DATA:g_tabix TYPE i,
         g_lines TYPE i,
         g_times TYPE i,
         g_count TYPE i,
         g_i     TYPE i,
         g_j     TYPE i.
    DATA:g_tablename TYPE ddobjname,
         g_condition TYPE string,
         g_field     TYPE char100,
         gt_table    TYPE TABLE OF dfies,
         gs_table    TYPE dfies,
         gt_key      TYPE TABLE OF dfies.

    DATA:gt_varconfg TYPE TABLE OF zhr_kpi_varconfg,
         gs_varconfg TYPE zhr_kpi_varconfg.

    DATA:dyn_table TYPE REF TO data,
         dyn_wa    TYPE REF TO data.

    FIELD-SYMBOLS: <dyn_table> TYPE table,
                   <dyn_wa>    TYPE any,
                   <fs_field>  TYPE any.

    SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
    PARAMETERS:p_query  TYPE rszcompid OBLIGATORY,
               p_keynum TYPE /bic/oizkeynum OBLIGATORY,
               p_dso    TYPE rsdodsobject OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK blk1.

    *SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-002.
    *PARAMETERS:p_lzlx1 RADIOBUTTON GROUP g1,
    *           p_lzlx2 RADIOBUTTON GROUP g1,
    *           p_lzlx3 RADIOBUTTON GROUP g1.
    *SELECTION-SCREEN END OF BLOCK blk2.

    SELECTION-SCREEN BEGIN OF BLOCK blk3 WITH FRAME TITLE text-003.
    PARAMETERS:p_org2 AS CHECKBOX,
               p_org3 AS CHECKBOX,
               p_org4 AS CHECKBOX,
               p_org5 AS CHECKBOX,
               p_org6 AS CHECKBOX.
    SELECTION-SCREEN END OF BLOCK blk3.

    *SELECTION-SCREEN BEGIN OF BLOCK blk4 WITH FRAME TITLE text-004.
    *PARAMETERS:p_yx AS CHECKBOX,
    *           p_ex AS CHECKBOX,
    *           p_sx AS CHECKBOX.
    *SELECTION-SCREEN END OF BLOCK blk4.


    START-OF-SELECTION.
      SELECT SINGLE * FROM rsrrepdir INTO gs_repdir
           WHERE compid  = p_query
              AND objvers  'A'.

      IF sy-subrc <> 0.
        MESSAGE e001 WITH '查询不存在,请重新输入'.
      ENDIF.

      CONCATENATE '/BIC/A' p_dso '00' INTO g_tablename.
      CALL FUNCTION 'DDIF_FIELDINFO_GET'
        EXPORTING
          tabname        = g_tablename
          langu          = sy-langu
        TABLES
          dfies_tab      = gt_table
        EXCEPTIONS
          not_found      1
          internal_error 2
          OTHERS         3.
      IF sy-subrc <> 0.
        MESSAGE e001 WITH '数据存储对象不存在,请重新输入'.
      ENDIF.

      gt_key = gt_table.
      DELETE gt_key WHERE domname NE 'RSKYFNUM'.

    *创建动态表结构
      CREATE DATA dyn_table TYPE TABLE OF (g_tablename).
    *创建动态内表
      ASSIGN dyn_table->* TO <dyn_table>.
    *创建动态工作区结构
      CREATE DATA dyn_wa LIKE LINE OF <dyn_table>.
    *创建动态工作区
      ASSIGN dyn_wa->* TO <dyn_wa>.

      SELECT SINGLE calmonth INTO g_month
        FROM /bic/mzcrkzmx
        WHERE /bic/zcrkzmx 'Z1XTDQYHLS'
          AND objvers 'A'
          AND calday '99991231'.
      IF sy-subrc NE 0.
        g_date = sy-datum 1.
        g_month = g_date(6).
      ENDIF.

      IF p_org2 EQ 'X'.
        g_tlevel 2.
      ELSEIF p_org3 EQ 'X'.
        g_tlevel 3.
      ELSEIF p_org4 EQ 'X'.
        g_tlevel 4.
      ELSEIF p_org5 EQ 'X'.
        g_tlevel 5.
      ELSEIF p_org6 EQ 'X'.
        g_tlevel 6.
      ENDIF.

      CREATE OBJECT g_request
        EXPORTING
          i_genuniid = gs_repdir-genuniid.

      CALL FUNCTION 'RSZ_DB_QUERY_GET'
        EXPORTING
          i_compuid  = gs_repdir-compuid
          i_objvers  'A'
        IMPORTING
    *     E_COMPUID  =
    *     E_SUBRC    =
          e_t_prptys = gt_prptys
          e_t_dim    = gt_dim
          e_t_atr    = gt_atr
          e_t_mem    = gt_mem
          e_t_cel    = gt_cel
          e_t_con    = gt_con
          e_t_fac    = gt_fac.

      PERFORM frm_set_dim.
      PERFORM frm_set_variable.

      TRY.
          g_request->set_request( i_t_dim = gt_dim
                                  i_t_mem = gt_mem
                                  i_t_cel = gt_cel
                                  i_t_atr = gt_atr
                                  i_t_con = gt_con
                                  i_t_fac = gt_fac
                                  i_t_prptys = gt_prptys ).

          g_request->variables_set( i_t_var = gt_var ).
          g_request->variables_start).
          g_request->read_data).
          g_dataset = cl_rsr_data_set=>get( i_r_request = g_request ).
          g_dataset->refresh( i_version ).
        CATCH cx_rsr_x_message INTO g_cx_message.
        CATCH cx_root INTO g_cx_root.
          CLEAR g_error_string .

          g_error_string = g_cx_root->get_text).
          MESSAGE e001 WITH g_error_string.
      ENDTRY.

      gt_cell = g_dataset->n_sx_version_20a_1-cell_data.
      gt_axis = g_dataset->n_sx_version_20a_1-axis_data.

      CLEAR g_lines.
      READ TABLE gt_axis INTO gs_axis WITH KEY axis '000'.
      IF sy-subrc 0.
        gt_set = gs_axis-set.
        DESCRIBE TABLE gt_set LINES g_count.
      ENDIF.

      READ TABLE gt_axis INTO gs_axis WITH KEY axis '001'.   
    IF sy-subrc 0.     gt_set 
    = gs_axis-set.   
    ENDIF.   g_i 

    0.   

    LOOP AT gt_set INTO gs_set.     
    READ TABLE gt_table INTO gs_table WITH KEY fieldname 'CALMONTH'.     
    IF sy-subrc 0.       
    CONCATENATE '<DYN_WA>-' 'CALMONTH' INTO g_field.       
    ASSIGN (g_fieldTO <fs_field>.       <fs_field> 
    = g_month.     
    ENDIF.     

    READ TABLE gt_table INTO gs_table WITH KEY fieldname '/BIC/ZKEYNUM'.     
    IF sy-subrc 0.       
    CONCATENATE '<DYN_WA>-' '/BIC/ZKEYNUM' INTO g_field.       
    ASSIGN (g_fieldTO <fs_field>.       <fs_field> 
    = p_keynum.     
    ENDIF.     

    READ TABLE gt_table INTO gs_table WITH KEY fieldname 'RF_TLEVEL'.     
    IF sy-subrc 0.       
    CONCATENATE '<DYN_WA>-' 'RF_TLEVEL' INTO g_field.       
    ASSIGN (g_fieldTO <fs_field>.       <fs_field> 
    = g_tlevel.     
    ENDIF.     

    READ TABLE gt_table INTO gs_table WITH KEY fieldname 'ORGUNIT'.     
    IF sy-subrc 0.       
    CONCATENATE '<DYN_WA>-' 'ORGUNIT' INTO g_field.       
    ASSIGN (g_fieldTO <fs_field>.       <fs_field> 
    = gs_set-chavl.     
    ENDIF.     g_j 

    1.     
    DO g_count TIMES.       
    CLEAR:gs_cell.       
    READ TABLE gt_cell INTO gs_cell INDEX ( g_i * g_count + g_j ).       

    READ TABLE gt_key INTO gs_table INDEX g_j.       
    IF sy-subrc 0.         
    CONCATENATE '<DYN_WA>-' gs_table-fieldname INTO g_field.         
    ASSIGN (g_fieldTO <fs_field>.         <fs_field> 
    = gs_cell-value.       
    ENDIF.       g_j 

    = g_j + 1.     
    ENDDO.     

    AT END OF tuple_ordinal.       g_i 
    = g_i + 1.     
    ENDAT.     

    APPEND <dyn_wa> TO <dyn_table>.   
    ENDLOOP.   

    PERFORM frm_update_db.



    *&---------------------------------------------------------------------*
    *&      Form  FRM_SET_DIM
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_set_dim .   

    CLEAR:gs_dim.   
    READ TABLE gt_dim INTO gs_dim WITH KEY iobjnm 'ZCORGLVL2'.   
    IF sy-subrc 0.     g_tabix 
    = sy-tabix.     
    IF p_org2 EQ 'X'.       gs_dim
    -axis 'Y'.     
    ELSE.       
    CLEAR gs_dim-axis.     
    ENDIF.     
    MODIFY gt_dim FROM gs_dim INDEX g_tabix.   
    ENDIF.   


    CLEAR gs_dim.   
    READ TABLE gt_dim INTO gs_dim WITH KEY iobjnm 'ZCORGLVL3'.   
    IF sy-subrc 0.     g_tabix 
    = sy-tabix.     
    IF p_org3 EQ 'X'.       gs_dim
    -axis 'Y'.     
    ELSE.       
    CLEAR gs_dim-axis.     
    ENDIF.     
    MODIFY gt_dim FROM gs_dim INDEX g_tabix.   
    ENDIF.   

    CLEAR gs_dim.   
    READ TABLE gt_dim INTO gs_dim WITH KEY iobjnm 'ZCORGLVL4'.   
    IF sy-subrc 0.     g_tabix 
    = sy-tabix.     
    IF p_org4 EQ 'X'.       gs_dim
    -axis 'Y'.     
    ELSE.       
    CLEAR gs_dim-axis.     
    ENDIF.     
    MODIFY gt_dim FROM gs_dim INDEX g_tabix.   
    ENDIF.   

    CLEAR gs_dim.   
    READ TABLE gt_dim INTO gs_dim WITH KEY iobjnm 'ZCORGLVL5'.   
    IF sy-subrc 0.     g_tabix 
    = sy-tabix.     
    IF p_org5 EQ 'X'.       gs_dim
    -axis 'Y'.     
    ELSE.       
    CLEAR gs_dim-axis.     
    ENDIF.     
    MODIFY gt_dim FROM gs_dim INDEX g_tabix.   
    ENDIF.   

    CLEAR gs_dim.   
    READ TABLE gt_dim INTO gs_dim WITH KEY iobjnm 'ZCORGLVL6'.   
    IF sy-subrc 0.     g_tabix 
    = sy-tabix.     
    IF p_org6 EQ 'X'.       gs_dim
    -axis 'Y'.     
    ELSE.       
    CLEAR gs_dim-axis.     
    ENDIF.     
    MODIFY gt_dim FROM gs_dim INDEX g_tabix.   
    ENDIF.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  FRM_UPDATE_DB
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_update_db .   
    CONCATENATE '/BIC/ZKEYNUM = ' 'P_KEYNUM' 'AND RF_TLEVEL =' 'G_TLEVEL' INTO g_condition SEPARATED BY space.   

    DO TIMES.     
    DELETE FROM (g_tablenameWHERE (g_condition).     

    INSERT (g_tablenameFROM TABLE <dyn_table>.     
    IF sy-subrc 0.       
    COMMIT WORK AND WAIT.       
    MESSAGE s001 WITH '数据更新成功'.       
    EXIT.     
    ELSE.       
    WAIT UP TO 5 SECONDS.     
    ENDIF.   
    ENDDO.

    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  FRM_SET_VARIABLE
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_set_variable .   

    SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_varconfg     
    FROM zhr_kpi_varconfg     
    WHERE keynum = p_keynum.   

    CLEAR:gs_var,gt_var.   
    LOOP AT gt_varconfg INTO gs_varconfg.     
    MOVE-CORRESPONDING gs_varconfg TO gs_var.     
    APPEND gs_var TO gt_var.   
    ENDLOOP.



    *  IF p_lzlx1 = 'X'.
    *    gs_var-vnam = 'ZCLZLX_V01'.
    *    gs_var-sign = 'I'.
    *    gs_var-opt = 'EQ'.
    *    gs_var-low = 'A'.
    *    CLEAR gs_var-high.
    *    APPEND gs_var TO gt_var.
    *
    *    gs_var-vnam = 'ZCLZLX_V01'.
    *    gs_var-sign = 'I'.
    *    gs_var-opt = 'EQ'.
    *    gs_var-low = 'B'.
    *    CLEAR gs_var-high.
    *    APPEND gs_var TO gt_var.
    *  ENDIF.
    *
    *  IF p_lzlx2 = 'X'.
    *    gs_var-vnam = 'ZCLZLX_V01'.
    *    gs_var-sign = 'I'.
    *    gs_var-opt = 'EQ'.
    *    gs_var-low = 'A'.
    *    CLEAR gs_var-high.
    *    APPEND gs_var TO gt_var.
    *  ENDIF.
    *
    *  IF p_lzlx3 = 'X'.
    *    gs_var-vnam = 'ZCLZLX_V01'.
    *    gs_var-sign = 'I'.
    *    gs_var-opt = 'EQ'.
    *    gs_var-low = 'B'.
    *    CLEAR gs_var-high.
    *    APPEND gs_var TO gt_var.
    *  ENDIF.
    *
    *
    *  IF p_yx EQ 'X'.
    *    gs_var-vnam = 'ZCGWSX_M'.
    *    gs_var-sign = 'I'.
    *    gs_var-opt = 'EQ'.
    *    gs_var-low = '0010'.
    *    CLEAR gs_var-high.
    *    APPEND gs_var TO gt_var.
    *  ENDIF.
    *
    *  IF p_ex EQ 'X'.
    *    gs_var-vnam = 'ZCGWSX_M'.
    *    gs_var-sign = 'I'.
    *    gs_var-opt = 'EQ'.
    *    gs_var-low = '0020'.
    *    CLEAR gs_var-high.
    *    APPEND gs_var TO gt_var.
    *  ENDIF.
    *
    *  IF p_sx EQ 'X'.
    *    gs_var-vnam = 'ZCGWSX_M'.
    *    gs_var-sign = 'I'.
    *    gs_var-opt = 'EQ'.
    *    gs_var-low = '0030'.
    *    CLEAR gs_var-high.
    *    APPEND gs_var TO gt_var.
    *  ENDIF.

    ENDFORM.

  • 相关阅读:
    Java——HTTPServletRequest的使用
    JavaWeb——HttpServletResponse的使用,文件下载
    JavaWeb——Servlet简介
    JavaWeb——TomCat服务器
    HTTP与HTTPS
    Java——DBCP连接池
    Java——JDBC连接MySQL
    Java——线程锁,死锁,等待唤醒机制
    LeetCode118. 杨辉三角
    LeetCode66. 加一
  • 原文地址:https://www.cnblogs.com/xmqlv20081008/p/8359735.html
Copyright © 2011-2022 走看看