动态执行程序

  CASE ok_code.
    WHEN 'EXCU'.
      CLEAR ok_code.
      IF gv_report IS INITIAL.
        PERFORM frm_split_sql.
        PERFORM frm_execute_query.
        PERFORM frm_execute_update.
        PERFORM frm_display.
      ELSE.
        CLEAR gv_msg.
        PERFORM frm_check_syntax.
        CHECK gv_msg IS INITIAL.
        PERFORM frm_runreport.
      ENDIF.
    WHEN 'EDIT'.
      CLEAR ok_code.
      PERFORM frm_edit_call USING 'X'.
    WHEN 'SYNT'.
      CLEAR gv_msg.
      PERFORM frm_check_syntax.
  ENDCASE.
*----------------------------------------------------------------------*
***INCLUDE ZOSQL_QUERY_F01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FRM_INIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_init .
  IF go_container IS INITIAL.
    CREATE OBJECT go_container
      EXPORTING
        container_name = 'CODE'.
  ENDIF.

  IF go_sql IS INITIAL.
    CREATE OBJECT go_sql
      EXPORTING
*        max_number_chars       = 2000
        style                  = 0
*     WORDWRAP_MODE          = WORDWRAP_AT_WINDOWBORDER
        wordwrap_position      = -1
*     WORDWRAP_TO_LINEBREAK_MODE = FALSE
*     FILEDROP_MODE          = DROPFILE_EVENT_OFF
        parent                 = go_container.
  ENDIF.

*  CALL METHOD go_sql->set_readonly_mode
*    EXPORTING
*      readonly_mode          = 1
*    EXCEPTIONS
*      error_cntl_call_method = 1
*      invalid_parameter      = 2
*      OTHERS                 = 3.
*
*  CALL METHOD go_sql->set_toolbar_mode
*    EXPORTING
*      toolbar_mode           = 0
*    EXCEPTIONS
*      error_cntl_call_method = 1
*      invalid_parameter      = 2
*      OTHERS                 = 3.

*  CALL METHOD go_sql->protect_lines
*    EXPORTING
*      from_line                     = 1
*      protect_mode                  = 1
*      to_line                       = 1
*      enable_editing_protected_text = 0
*    EXCEPTIONS
*      error_cntl_call_method        = 1
*      invalid_parameter             = 2
*      OTHERS                        = 3.
ENDFORM.                    " FRM_INIT
*&---------------------------------------------------------------------*
*&      Form  FRM_SPLIT_SQL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_split_sql .
  DATA : lt_line TYPE STANDARD TABLE OF tt_line,
         ls_line TYPE tdline,
         ls_sql  TYPE string,
         ls_sel  TYPE string,
         ls_from TYPE string,
         ls_whe  TYPE string,
         ls_spc  TYPE string,
         lv_tab  TYPE tabname,
         lv_inx  TYPE i,
         lv_pos  TYPE i.

  DATA : BEGIN OF lt_split OCCURS 0,
          fld TYPE char50,
         END OF lt_split,
         BEGIN OF lt_as OCCURS 0,
           tabname TYPE tabname,
           as      TYPE char10,
         END OF lt_as,
         ls_split LIKE LINE OF lt_split.

  REFRESH:gt_fieldcat,gt_fieldcat_tab,gt_fields,gt_where.
  CLEAR  :gs_fieldcat,gs_fields,gs_sel,gs_where,gs_from.

  CALL METHOD go_sql->get_text_as_r3table
    IMPORTING
      table                  = lt_line
    EXCEPTIONS
      error_dp               = 1
      error_cntl_call_method = 2
      error_dp_create        = 3
      potential_data_loss    = 4
      OTHERS                 = 5.
  LOOP AT lt_line INTO ls_line.
    CONCATENATE ls_sql ls_line INTO ls_sql SEPARATED BY space.
  ENDLOOP.
  IF sy-subrc <> 0.
    MESSAGE e001(00) WITH 'empty'.
  ENDIF.

  CHECK ls_sql IS NOT INITIAL.

  REPLACE FIRST OCCURRENCE OF '.' IN ls_sql WITH space.
  REPLACE FIRST OCCURRENCE OF ';' IN ls_sql WITH space.

  CONDENSE ls_sql.
  TRANSLATE ls_sql TO UPPER CASE.

  IF ls_sql CS 'SELECT'.
    gv_type = 'SELECT'.
  ELSEIF ls_sql CS 'UPDATE' OR ls_sql CS 'INSERT' OR ls_sql CS 'DELETE'.
    gv_type = 'UPDATE'.
  ELSE.
    gv_type = 'OTHERS'.
  ENDIF.

  CASE gv_type.
    WHEN 'SELECT'.
      SPLIT ls_sql  AT 'FROM'  INTO ls_sel ls_from.
      CONDENSE:ls_sel,ls_from.
      SPLIT ls_from AT 'WHERE' INTO ls_from ls_whe.
      CONDENSE:ls_sel,ls_from.

      IF ls_from CS 'AS'.
        SPLIT ls_from AT space INTO TABLE lt_split.
        WHILE 1 = 1.
          LOOP AT lt_split FROM lv_inx WHERE fld = 'AS'.
            lv_pos = sy-tabix - 1.
            READ TABLE lt_split INTO ls_split INDEX lv_pos.
            lt_as-tabname = ls_split-fld.
            lv_pos = lv_pos + 2.
            READ TABLE lt_split INTO ls_split INDEX lv_pos.
            lt_as-as = ls_split-fld.
            APPEND lt_as.
            CLEAR:lt_as,ls_split,lt_split.
            lv_inx = lv_pos.
          ENDLOOP.
          IF sy-subrc <> 0.
            EXIT.
          ENDIF.
        ENDWHILE.
      ENDIF.

      REPLACE FIRST OCCURRENCE OF 'SELECT' IN ls_sel WITH space.
      IF sy-subrc <> 0.
        MESSAGE e001(00) WITH 'only select'.
        EXIT.
      ENDIF.

      CONDENSE ls_sel.
      IF ls_sel = '*'.
        SPLIT ls_from AT space   INTO lv_tab ls_spc.
        CONDENSE:ls_from.
        SELECT fieldname INTO TABLE gt_fields FROM dd03l WHERE tabname = lv_tab AND as4local = 'A' AND comptype = 'E'.
      ELSE.
        SPLIT ls_sel  AT space   INTO TABLE gt_fields.
      ENDIF.

      LOOP AT gt_fields INTO gs_fields.
        SPLIT gs_fields-fieldname AT '~' INTO gs_fieldcat-tabname gs_fieldcat-fieldname.
        IF gs_fieldcat-fieldname IS INITIAL.
          gs_fieldcat-fieldname = gs_fieldcat-tabname.
          gs_fieldcat-tabname   = ls_from.
        ENDIF.

        READ TABLE lt_as WITH KEY as = gs_fieldcat-tabname.
        IF sy-subrc = 0.
          gs_fieldcat-tabname = lt_as-tabname.
        ENDIF.

        APPEND gs_fieldcat TO gt_fieldcat.
        CLEAR:gs_fields,gs_fieldcat.
      ENDLOOP.

      gs_from        = ls_from.
      gs_sel         = ls_sel.
      gt_code[]      = lt_line.
      gs_where-where = ls_whe.
    WHEN 'UPDATE'.
      gt_code[]      = lt_line.
    WHEN OTHERS.
      MESSAGE e001(00) WITH 'Unknow option'.
  ENDCASE.

  REFRESH lt_line.
ENDFORM.                    " FRM_SPLIT_SQL
*&---------------------------------------------------------------------*
*&      Form  FRM_EXECUTE_QUERY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_execute_query .
  DATA: ldtab_cell     TYPE REF TO data.
  DATA: lo_err         TYPE REF TO cx_sy_dynamic_osql_semantics.

  CHECK gv_type = 'SELECT'.

  LOOP AT gt_fieldcat INTO gs_fieldcat.
    gs_fieldcat_tab-fieldname = gs_fieldcat-fieldname.
    gs_fieldcat_tab-ref_field = gs_fieldcat-fieldname.
    gs_fieldcat_tab-ref_table = gs_fieldcat-tabname.

    APPEND gs_fieldcat_tab TO gt_fieldcat_tab.
    CLEAR:gs_fieldcat_tab,gs_fieldcat.
  ENDLOOP.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog           = gt_fieldcat_tab
    IMPORTING
      ep_table                  = ldtab_cell
    EXCEPTIONS
      generate_subpool_dir_full = 1
      OTHERS                    = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    EXIT.
  ENDIF.

  ASSIGN ldtab_cell->* TO <data>.

  PERFORM frm_runtime_start.
  CLEAR gv_msg.
  TRY.
      SELECT (gt_fields)
        FROM (gs_from)
        INTO TABLE <data>
        WHERE (gs_where).
      IF sy-subrc <> 0.
        MESSAGE e001(00) WITH 'no data'.
      ENDIF.
    CATCH cx_sy_dynamic_osql_semantics INTO lo_err.
      gv_msg = lo_err->get_text( ).
  ENDTRY.

  PERFORM frm_runtime_end.

ENDFORM.                    " FRM_EXCUTE_QUERY

*&---------------------------------------------------------------------*
*&      Form  FRM_RUNTIME_START
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_runtime_start.
  GET TIME STAMP FIELD t1.
  CONVERT TIME STAMP t1 TIME ZONE sy-zonlo INTO DATE dat1 TIME tim1.
ENDFORM.                    "FRM_RUNTIME_START

*&---------------------------------------------------------------------*
*&      Form  FRM_RUNTIME_END
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_runtime_end.
  GET TIME STAMP FIELD t2.
  CONVERT TIME STAMP t1 TIME ZONE sy-zonlo INTO DATE dat2 TIME tim2.
  t = t2 - t1.

  IF t = 0.
    t = space.
  ENDIF.

  IF tim1 = '000000'.
    tim1 = space.
  ENDIF.

  IF tim2 = '000000'.
    tim2 = space.
  ENDIF.

  CALL FUNCTION 'SWI_DURATION_DETERMINE'
    EXPORTING
      start_date = dat1
      end_date   = dat2
      start_time = tim1
      end_time   = tim2
    IMPORTING
      duration   = runtime.

  CALL FUNCTION 'MONI_TIME_CONVERT'
    EXPORTING
      ld_duration        = runtime
    IMPORTING
      lt_output_duration = outtime.
ENDFORM.                    "FRM_RUNTIME_END

*&---------------------------------------------------------------------*
*&      Form  frm_exEcute_update
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_execute_update.
  DATA itab_prog TYPE STANDARD TABLE OF tdline.
  DATA ls_line   TYPE tdline.
  DATA prog      TYPE program.
  DATA msg(120)  TYPE c.

  CHECK gv_type = 'UPDATE'.

* Modify Program ABAP Code.
  CONCATENATE 'PROGRAM ZSQLUPDATE_' sy-datum ' MESSAGE-ID AT.' INTO ls_line.
  APPEND ls_line TO itab_prog.
  ls_line = 'DATA: COUNT TYPE I.'.
  APPEND ls_line TO itab_prog.
  ls_line = 'DATA: exc_ref    TYPE REF TO cx_sy_native_sql_error.'.
  APPEND ls_line TO itab_prog.
  ls_line = 'FORM FRM_UPDATE CHANGING CV_LINE TYPE I CV_MSG TYPE BAPI_MSG.'.
  APPEND ls_line TO itab_prog.
  ls_line = 'TRY.'.
  APPEND ls_line TO itab_prog.
  ls_line = 'EXEC SQL.'.
  APPEND ls_line TO itab_prog.
  LOOP AT gt_code INTO ls_line.
    REPLACE FIRST OCCURRENCE OF '.' IN ls_line WITH space.
    REPLACE FIRST OCCURRENCE OF ';' IN ls_line WITH space.
    APPEND ls_line TO itab_prog.
  ENDLOOP.
  ls_line = 'ENDEXEC.'.
  APPEND ls_line TO itab_prog.
  ls_line = 'CV_LINE = SY-DBCNT.'.
  APPEND ls_line TO itab_prog.
  ls_line = 'CATCH cx_sy_native_sql_error INTO exc_ref.'.
  APPEND ls_line TO itab_prog.
  ls_line = 'cv_msg = exc_ref->get_text( ).'.
  APPEND ls_line TO itab_prog.
  ls_line = 'ENDTRY.'.
  APPEND ls_line TO itab_prog.
  ls_line = 'ENDFORM.'.
  APPEND ls_line TO itab_prog.
* Dynamic Program Display
*  IF sy-ucomm = 'EDEX'.
*    CALL FUNCTION 'EDITOR_APPLICATION'
*      EXPORTING
*        application = 'BF'
*        display     = ' '
*        name        = 'Modify Program...'
*      IMPORTING
*        fcode       = fcode
*      TABLES
*        content     = itab_prog.
*    STOP.
*  ENDIF.
* Dynamic Program Excuted
  CLEAR gv_msg.
  GENERATE SUBROUTINE POOL itab_prog NAME prog
                                     MESSAGE msg.
  IF sy-subrc <> 0.
    gv_msg = msg.
  ELSE.
    PERFORM frm_runtime_start.
    PERFORM frm_update IN PROGRAM (prog) CHANGING gv_line gv_msg.
    PERFORM frm_runtime_end.
  ENDIF.

  REFRESH itab_prog.
ENDFORM.                    "frm_excute_update
*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_display .
  DATA : ls_layout TYPE lvc_s_layo.

  CHECK gv_type = 'SELECT' OR gv_report = 'X'.

  CHECK <data> IS ASSIGNED AND <data> IS NOT INITIAL.

  ls_layout-zebra = 'X'.
  ls_layout-cwidth_opt = 'X'.

  IF go_cont_alv IS INITIAL.
    CREATE OBJECT go_cont_alv
      EXPORTING
        container_name = 'LIST'.
  ENDIF.

  IF go_alv IS INITIAL.
    CREATE OBJECT go_alv
      EXPORTING
        i_parent = go_cont_alv.
  ENDIF.

  DESCRIBE TABLE <data> LINES gv_line.

  CALL METHOD go_alv->set_table_for_first_display
    EXPORTING
      i_save                        = 'A'
      i_default                     = 'X'
      is_layout                     = ls_layout
    CHANGING
      it_outtab                     = <data>
      it_fieldcatalog               = gt_fieldcat_tab
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.
*  ELSE.
*    DATA ls_ref TYPE lvc_s_stbl.
*    ls_ref-row = 'X'.
*    ls_ref-col = 'X'.
*
*    CALL METHOD go_alv->refresh_table_display
*      EXPORTING
*        is_stable      = ls_ref
**        i_soft_refresh =
*      EXCEPTIONS
*        finished       = 1
*        OTHERS         = 2.
*  ENDIF.
ENDFORM.                    " FRM_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  frm_check_syntax
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_check_syntax.
  CLEAR ok_code.
  CHECK gv_report = 'X'.
  CHECK gt_code IS NOT INITIAL.
  DATA lv_report TYPE sy-repid.
  DATA returncode TYPE sy-subrc.
  DATA ld_trdir   TYPE trdir.
  DATA lt_warr    TYPE STANDARD TABLE OF rslinlmsg.
  DATA lt_errs    TYPE STANDARD TABLE OF rslinlmsg.


  CONCATENATE 'Y==%' sy-uname '%_' sy-datum sy-uzeit INTO lv_report.

  INSERT REPORT lv_report FROM gt_code.

* EDITOR-CALL FOR REPORT lv_report DISPLAY-MODE.

  SELECT SINGLE * INTO ld_trdir FROM trdir WHERE name = lv_report.

  CALL FUNCTION 'EDITOR_SYNTAX_CHECK'
    EXPORTING
      i_program       = lv_report
      i_trdir         = ld_trdir
*          i_corrwarn      = 'X'
    IMPORTING
      o_error_subrc   = returncode
      o_error_message = gv_msg
    TABLES
      i_source        = gt_code
      o_warnings_tab  = lt_warr
      o_error_tab     = lt_errs
    EXCEPTIONS
      OTHERS          = 1.

  DELETE REPORT lv_report.
  COMMIT WORK.
ENDFORM.                    "frm_check_syntax
*&---------------------------------------------------------------------*
*&      Form  FRM_EDIT_CALL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_edit_call USING uv_flag.
  DATA lt_code      TYPE  STANDARD TABLE OF tt_line.
  DATA ls_code      TYPE tt_line.
  lt_code = gt_code.
  CALL METHOD go_sql->get_text_as_r3table
    IMPORTING
      table                  = gt_code[]
    EXCEPTIONS
      error_dp               = 1
      error_cntl_call_method = 2
      error_dp_create        = 3
      potential_data_loss    = 4
      OTHERS                 = 5.
*  EDITOR-CALL FOR REPORT 'YTEST_001'.
  EDITOR-CALL FOR gt_code.
  IF sy-subrc = 0.
    DELETE gt_code WHERE tdline(1) = '*' OR tdline IS INITIAL.
    IF lt_code <> gt_code.
      CALL METHOD go_sql->set_text_as_r3table
        EXPORTING
          table           = gt_code[]
        EXCEPTIONS
          error_dp        = 1
          error_dp_create = 2
          OTHERS          = 3.

*      CHECK uv_flag = 'X' AND gv_report IS INITIAL.
*      PERFORM frm_split_sql.
*      PERFORM frm_execute_query.
*      PERFORM frm_display.
    ENDIF.
  ENDIF.
ENDFORM.                    " FRM_EDIT_CALL
*&---------------------------------------------------------------------*
*&      Form  FRM_INIT_EDITOR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_init_editor .
  IF go_container IS INITIAL.
    CREATE OBJECT go_container
      EXPORTING
        container_name = 'ABAP'.
  ENDIF.

  IF go_editor IS INITIAL.
    CREATE OBJECT go_editor
      EXPORTING
        mode              = 'EDIT'
        link_dynnr        = sy-dynnr
        content           = gt_code
        control_container = 'ABAP'.
  ENDIF.

ENDFORM.                    " FRM_INIT_EDITOR
*&---------------------------------------------------------------------*
*&      Form  FRM_EXECUTE_STATEMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_execute_statement .

ENDFORM.                    " FRM_EXECUTE_STATEMENT


*&---------------------------------------------------------------------*
*&      Form  frm_runreport
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_runreport.
  DATA prog      TYPE program.
  DATA msg(120)  TYPE c.
  DATA it_fieldcat TYPE slis_t_fieldcat_alv.
  TYPES tt_item TYPE c LENGTH 1024.

  DATA it_data TYPE STANDARD TABLE OF tt_item.

  REFRESH:it_fieldcat,it_data.

  IF gt_code IS INITIAL.
    CALL METHOD go_sql->get_text_as_r3table
      IMPORTING
        table                  = gt_code
      EXCEPTIONS
        error_dp               = 1
        error_cntl_call_method = 2
        error_dp_create        = 3
        potential_data_loss    = 4
        OTHERS                 = 5.
  ENDIF.

  CHECK gt_code IS NOT INITIAL.

  GENERATE SUBROUTINE POOL gt_code NAME prog
                                   MESSAGE msg.
  IF sy-subrc = 0.
    gv_msg = ''.
    PERFORM frm_runtime_start.
    PERFORM frm_get_data IN PROGRAM (prog) TABLES it_fieldcat it_data IF FOUND.
    PERFORM frm_runtime_end.
    PERFORM frm_conv_fieldcat TABLES it_fieldcat it_data.
    PERFORM frm_display.
  ELSE.
    gv_msg = msg.
  ENDIF.
ENDFORM.                    "frm_runreport

*&---------------------------------------------------------------------*
*&      Form  FRM_CONV_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->IT_FIELDCAT  text
*----------------------------------------------------------------------*
FORM frm_conv_fieldcat TABLES it_fieldcat TYPE slis_t_fieldcat_alv it_data.
  DATA: ldtab_cell     TYPE REF TO data.
  DATA: ldtab_line     TYPE REF TO data.
  DATA: ls_item        TYPE c LENGTH 1024.
  DATA ls_fieldcat TYPE slis_fieldcat_alv.
  FIELD-SYMBOLS : <fs_value> TYPE x,
                  <fs_input> TYPE x.

  REFRESH gt_fieldcat_tab.

  CHECK it_fieldcat[] IS NOT INITIAL AND it_data[] IS NOT INITIAL.

  LOOP AT it_fieldcat INTO ls_fieldcat.
    MOVE:
    ls_fieldcat-fieldname       TO gs_fieldcat_tab-fieldname,
    ls_fieldcat-seltext_l       TO gs_fieldcat_tab-scrtext_l,
    ls_fieldcat-seltext_m       TO gs_fieldcat_tab-scrtext_m,
    ls_fieldcat-seltext_s       TO gs_fieldcat_tab-scrtext_s,
    ls_fieldcat-outputlen       TO gs_fieldcat_tab-outputlen,
    ls_fieldcat-inttype         TO gs_fieldcat_tab-inttype,
    ls_fieldcat-intlen          TO gs_fieldcat_tab-intlen,
    ls_fieldcat-qfieldname      TO gs_fieldcat_tab-qfieldname,
    ls_fieldcat-edit_mask       TO gs_fieldcat_tab-edit_mask,
    ls_fieldcat-round           TO gs_fieldcat_tab-decimals.
    APPEND gs_fieldcat_tab      TO gt_fieldcat_tab.
    CLEAR gs_fieldcat_tab.
  ENDLOOP.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog           = gt_fieldcat_tab
    IMPORTING
      ep_table                  = ldtab_cell
    EXCEPTIONS
      generate_subpool_dir_full = 1
      OTHERS                    = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    EXIT.
  ENDIF.

  ASSIGN ldtab_cell->* TO <data>.
  CREATE DATA ldtab_line LIKE LINE OF <data>.
  ASSIGN ldtab_line->* TO <item>.

  LOOP AT it_data INTO ls_item.
    CATCH SYSTEM-EXCEPTIONS assign_casting_illegal_cast = 1.
      ASSIGN ls_item TO <fs_value> CASTING.
    ENDCATCH.
    IF sy-subrc = 0.
      ASSIGN <item> TO <fs_input> CASTING.
      <fs_input> = <fs_value>.
    ENDIF.
    APPEND <item> TO <data>.
  ENDLOOP.
ENDFORM.                    "FRM_CONV_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  FRM_REFRESH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_refresh.

ENDFORM.                    "FRM_REFRESH


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值