zoukankan      html  css  js  c++  java
  • 用程序读取Query,模拟APD将数据存到直接更新的DSO

    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_calday  TYPE sy-datum,
         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, "要执行的Query
               p_dso    TYPE rsdodsobject OBLIGATORY.          "直接更新DSO
    SELECTION-SCREEN END OF BLOCK blk1.

    SELECTION-SCREEN BEGIN OF BLOCK blk3 WITH FRAME TITLE text-003.
    PARAMETERS:p_org1 as CHECKBOX,
               p_org2 AS CHECKBOX.
    SELECTION-SCREEN END OF BLOCK blk3.

    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.
      CREATE OBJECT g_request
        EXPORTING
          i_genuniid = gs_repdir-genuniid.

    "创建动态内表,结构同直接更新DSO
      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>.

        g_date = sy-datum 1.
        g_month = g_date(6).
        g_calday = g_date

    "设置Query变量的值  PERFORM frm_set_variable.


      
    IF p_org1 EQ 'X'.
        g_tlevel 1.
        PERFORM frm_set_dim.  "设置Query需显示的维度
        PERFORM frm_execute_query.  "执行Query
        PERFORM frm_update_db.      "更新DSO
      ENDIF.


    *&---------------------------------------------------------------------*
    *&      Form  FRM_SET_DIM
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_set_dim.
      CLEAR:gt_prptys,gt_dim,gt_atr,gt_mem,gt_cel,gt_con,gt_fac.
      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.

      CLEAR:gs_dim.
      READ TABLE gt_dim INTO gs_dim WITH KEY iobjnm 'ZCORGLVL1'.
      IF sy-subrc 0.     g_tabix 
    = sy-tabix.     
    IF g_tlevel 1.       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.


    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  FRM_EXECUTE_QUERY
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_execute_query .   
    CLEAR:gt_cell,gt_axis,gt_set.   
    REFRESH <dyn_table>.   

    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 'CALDAY'.     
    IF sy-subrc 0.       
    CONCATENATE '<DYN_WA>-' 'CALDAY' INTO g_field.       
    ASSIGN (g_fieldTO <fs_field>.       <fs_field> 
    = g_calday.     
    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.
    ENDFORM.

  • 相关阅读:
    windows加固方案
    redis集群
    tar命令
    nfs安装配置
    nginx php版本隐藏
    细谈select函数(C语言)
    linux 下各errno的意义(转)
    iperf交叉编译:
    主机和虚拟机不能ping通问题
    Linux中tcpdump的编译和使用
  • 原文地址:https://www.cnblogs.com/xmqlv20081008/p/10437593.html
Copyright © 2011-2022 走看看