ALV-EDIT

来源:互联网 发布:mysql 多个字段排序 编辑:程序博客网 时间:2024/06/08 06:05


  

DATA:gr_table  TYPE REF TO cl_salv_table.
DATA:gt_alv TYPE TABLE OF zsmtschd.
DATAgt_mod TYPE TABLE OF zsmt_schp WITH HEADER LINE,
      gt_mod_w TYPE TABLE OF zsmt_schp WITH HEADER LINE.
DATA:git_events TYPE slis_t_event.     "ALV 事件
*----------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS handle_modify
    FOR EVENT data_changed_finished OF cl_gui_alv_grid
    IMPORTING  e_modified et_good_cells.

    METHODS    handle_data_changed
           FOR EVENT data_changed OF cl_gui_alv_grid
               IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.
ENDCLASS.                    "LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_modify.
    DATA stbl TYPE lvc_s_stbl.
  ENDMETHOD.                    "HANDLE_MODIFY
  METHOD handle_data_changed.
    DATA stbl TYPE lvc_s_stbl.
    PERFORM handle_data_changed  USING er_data_changed.  "处理受变化的数据
  ENDMETHOD.                    "HANDLE_MODIFY
ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .

DATA l_events TYPE LINE OF slis_t_event.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type     0
    IMPORTING
      et_events       git_events
    EXCEPTIONS
      list_type_wrong 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.
  ENDIF.
  l_events-name 'CALLER_EXIT'.
  l_events-form 'FM_BUTTON'.
  APPEND l_events TO git_events.



FORM fm_button USING e_grid TYPE slis_data_caller_exit.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
*   EXPORTING
*     IR_SALV_FULLSCREEN_ADAPTER       =
      IMPORTING
*     ET_EXCLUDING                     =
*     E_REPID                          =
*     E_CALLBACK_PROGRAM               =
*     E_CALLBACK_ROUTINE               =
        e_grid                           l_grid
*     ET_FIELDCAT_LVC                  =
*     ER_TRACE                         =
*     E_FLG_NO_HTML                    =
*     ES_LAYOUT_KKBLO                  =
*     ES_SEL_HIDE                      =
*     ET_EVENT_EXIT                    =
*     ER_FORM_TOL                      =
*     ER_FORM_EOL                      =
              .

* 设置enter事件
  CALL METHOD l_grid->register_edit_event
    EXPORTING
      i_event_id cl_gui_alv_grid=>mc_evt_enter
    EXCEPTIONS
      error      1
      OTHERS     2.
* 设置 单光标焦点移开被修改单元格后既触发事件
  CALL METHOD l_grid->register_edit_event
    EXPORTING
      i_event_id cl_gui_alv_grid=>mc_evt_modified
    EXCEPTIONS
      error      1
      OTHERS     2.

  CREATE OBJECT gt_event_receiver.
  SET HANDLER gt_event_receiver->handle_modify FOR l_grid.
  SET HANDLER gt_event_receiver->handle_data_changed FOR l_grid.



FORM handle_data_changed  USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.
  DATA:mod_data TYPE lvc_t_modi,
       wa_mod_data TYPE lvc_s_modi.
  DATA:l_htype LIKE dd01v-datatype.
  FIELD-SYMBOLS<fs_mod_rows> TYPE STANDARD TABLE,
                  <fs_cells> TYPE lvc_t_modi ,
                  <fs_cell_wa> TYPE lvc_s_modi .
  FIELD-SYMBOLS<ls_alv> LIKE LINE OF gt_alv.
  IF NOT p_er_data_changed->mp_mod_rows IS INITIAL.
    mod_data p_er_data_changed->mt_mod_cells.
    DATA:
         ls_mod_w LIKE LINE OF gt_mod_w.

    LOOP AT mod_data INTO wa_mod_data.
      READ TABLE gt_alv ASSIGNING <ls_alv> INDEX wa_mod_data-row_id.
      CASE wa_mod_data-fieldname.
        WHEN 'ZHBPX'.
          CALL FUNCTION 'NUMERIC_CHECK'
            EXPORTING
              string_in wa_mod_data-value
            IMPORTING
              htype     l_htype.

          IF l_htype <> 'NUMC' AND wa_mod_data-value IS NOT INITIAL.

            MOVE-CORRESPONDING <ls_alv> TO gt_mod_w.
            gt_mod_w-zhbpx wa_mod_data-value.
            APPEND gt_mod_wCLEAR gt_mod_w.

            MESSAGE e001(00WITH '输入的值包含非数字'.

          ELSE.
* 排除存在报错表中的数据,存需要记录进数据库表的数据
            LOOP AT gt_mod_w WHERE schdn <ls_alv>-schdn AND sponr <ls_alv>-sponr.
              DELETE gt_mod_w INDEX sy-tabix.
            ENDLOOP.

            MOVE-CORRESPONDING <ls_alv> TO gt_mod.
            gt_mod-zhbpx wa_mod_data-value.
            APPEND gt_modCLEAR gt_mod.

* 更新ALV显示数据
            <ls_alv>-zhbpx wa_mod_data-value.

          ENDIF.
      ENDCASE.
    ENDLOOP.
  ENDIF.

ENDFORM.                    "handle_data_changed



  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       sy-repid
      it_fieldcat_lvc          l_alv_filedcat
      is_layout_lvc            layout
      i_save                   'A'
      i_default                'X'
      i_callback_user_command  'USER_COMMAND'
      i_callback_pf_status_set 'ALV_STATUS'
      it_events                git_events
    TABLES
      t_outtab                 gt_alv.

0 0
原创粉丝点击