SAP ABAP ALV (LVC) 의 사용자 정의 이벤트 (F4 도움말 이벤트, 리턴 ENTER 단추 이벤트) 의 실례

29567 단어
1.            

*----------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED
*----------------------------------------------------------------------*
*       LCL_EVENT_RECEIVER
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA gv_flg  TYPE char01.

*----------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*       lcl_event_receiver    :
*----------------------------------------------------------------------*
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_f4
        FOR EVENT onf4 OF cl_gui_alv_grid
        IMPORTING e_fieldname
                  es_row_no
                  er_event_data
                  et_bad_cells.

ENDCLASS.                    "LCL_EVENT_RECEIVER DEFINITION

*----------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.

  METHOD  handle_modify.
    DATAlv_enter    TYPE REF TO cl_gui_event,
          lv_eventid  TYPE i.

*         
    lv_enter   tem_grid->cur_event.

*           
    IF lv_enter IS NOT INITIAL.
      lv_eventid lv_enter->eventid.
    ENDIF.

*      [  ]     ,     (19:      )
    IF lv_eventid 19
   AND sy-ucomm   ''.

      IF p_mmvds 'X'.
*                       
        PERFORM set_name1_maktx.

*          ,alv    
        PERFORM refresh_table_alv.

*              (        )
        PERFORM check_line_mmvds.

      ELSEIF p_detail 'X'.
*              (     )
        PERFORM check_line_dtdetail.

      ELSEIF p_vds 'X'.
*                (          )
        PERFORM set_name1_vds.

*          ,alv    
        PERFORM refresh_table_alv.

*              (          )
        PERFORM check_line_vds.
      ENDIF.

    ENDIF.

*      ,alv    
    PERFORM refresh_table_alv.

  ENDMETHOD.                    "HANDLE_MODIFY


  METHOD  handle_f4.
*                
    IF p_vds 'X'.
*               f4    
      PERFORM f4_help_zsjcs USING e_fieldname
                                  es_row_no.

*        ,alv    
      PERFORM refresh_table_alv.

    ENDIF.

  ENDMETHOD.                    "HANDLE_F4

ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION
 
 
2.   alv  
 
**EVENT LAYOUT   DATAls_events     TYPE slis_alv_event,         lt_event      TYPE slis_t_event,         ls_layout     TYPE lvc_s_layo.   ls_events-name 'CALLER_EXIT'.   ls_events-form 'FM_BUTTON'.   APPEND ls_events TO lt_event.   ls_layout-stylefname 'FIELD_STYL'.   ls_layout-zebra      'X'.   ls_layout-box_fname  'CHK_BOX'.   ls_layout-cwidth_opt 'X'.   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'     EXPORTING       i_callback_program       sy-repid       i_callback_pf_status_set 'PF_STATUS_SET'       i_callback_user_command  'USER_COMMAND'       is_layout_lvc            ls_layout       it_fieldcat_lvc          gt_fieldcat_lvc       i_save                   'X'       it_events                lt_event     TABLES       t_outtab                 pt_outdata     EXCEPTIONS       program_error            1       OTHERS                   2.
 
 
 
 
 
 
3.         
*&---------------------------------------------------------------------* *&      Form  FM_BUTTON *&---------------------------------------------------------------------* *         enter   *----------------------------------------------------------------------* *      -->E_GRID     text *----------------------------------------------------------------------* FORM fm_button USING e_grid TYPE slis_data_caller_exit.   DATAlv_event_receiver TYPE REF TO lcl_event_receiver,         lt_f4             TYPE lvc_t_f4,         ls_f4             TYPE lvc_s_f4.   CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'     IMPORTING       e_grid tem_grid. *   enter     CALL METHOD tem_grid->register_edit_event     EXPORTING       i_event_id cl_gui_alv_grid=>mc_evt_enter     EXCEPTIONS       error      1       OTHERS     2.   CREATE OBJECT lv_event_receiver.   SET HANDLER lv_event_receiver->handle_modify FOR tem_grid. *   f4     CHECK gv_flg IS INITIAL.   gv_flg 'X'.   ls_f4-fieldname  'ZSJCS'.   "      (    F4       )   ls_f4-register   'X'.   ls_f4-getbefore  'X'.   ls_f4-chngeafter 'X'.   INSERT ls_f4 INTO TABLE lt_f4.   CREATE OBJECT lv_event_receiver.   SET HANDLER lv_event_receiver->handle_f4 FOR tem_grid.   CALL METHOD tem_grid->register_f4_for_fields     EXPORTING       it_f4 lt_f4[]. ENDFORM.                    "FM_BUTTON
 
 
4.   alv-status   
 
*&---------------------------------------------------------------------* *&      Form  PF_STATUS_SET *&---------------------------------------------------------------------* *       status   *----------------------------------------------------------------------* *      -->RT_EXTAB   text *----------------------------------------------------------------------* FORM pf_status_set USING rt_extab TYPE slis_t_extab.   SET PF-STATUS 'STATUS_ALV'. ENDFORM.                    "PF_STATUS_SET
 
 
5.   alv-comman   
 
*&---------------------------------------------------------------------* *&      Form  USER_COMMAND *&---------------------------------------------------------------------* *       USER COMMMAND *----------------------------------------------------------------------* *      -->P_UCOMM      text *      -->PS_SELFIELD  text *----------------------------------------------------------------------* FORM user_command USING ucomm    LIKE sy-ucomm                         selfield TYPE slis_selfield.   DATA l_grid TYPE REF TO cl_gui_alv_grid. *------------ ALV           ---------------------------------*   CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'     IMPORTING       e_grid l_grid.   CALL METHOD l_grid->check_changed_data.   CASE ucomm. *   [     ]       WHEN 'CREATE'. *                    IF p_mmvds 'X'. *            (        )         PERFORM cteate_line_mmvds. *                   ELSEIF p_detail 'X'. *            (       )         PERFORM cteate_line_dtdetail. *                      ELSEIF p_vds 'X'. *            (          )         PERFORM cteate_line_vds.       ENDIF.       selfield-refresh 'X'. "            alv  ,       *   [     ]       WHEN 'DELETE'. *                    IF p_mmvds 'X'. *            (        )         PERFORM delete_line_mmvds. *                   ELSEIF p_detail 'X'. *            (       )         PERFORM delete_line_dtdetail. *                      ELSEIF p_vds 'X'. *            (          )         PERFORM delete_line_vds.       ENDIF.       selfield-refresh 'X'. "            alv  ,       *   [  ]       WHEN 'SAVE'. *                    IF p_mmvds 'X'. *           (        )         PERFORM save_data_mmvds. *                   ELSEIF p_detail 'X'. *           (       )         PERFORM save_data_dtdetail. *                      ELSEIF p_vds 'X'. *           (          )         PERFORM save_data_vds.       ENDIF.   ENDCASE. *------------ ALV           ---------------------------------*   CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'     IMPORTING       e_grid l_grid.   CALL METHOD l_grid->check_changed_data. ENDFORM.                    "USER_COMMAND
 
 
 
6.        
*&---------------------------------------------------------------------* *&      Form  REFRESH_TABLE_ALV *&---------------------------------------------------------------------* *          ,alv     *----------------------------------------------------------------------* FORM refresh_table_alv .   DATAstbl        TYPE lvc_s_stbl. *   stbl-row 'X'.   stbl-col 'X'.   CALL METHOD tem_grid->refresh_table_display     EXPORTING       is_stable stbl. ENDFORM.                    " REFRESH_TABLE_ALV
*&---------------------------------------------------------------------*
*&      Form  F4_HELP_ZSJCS
*&---------------------------------------------------------------------*
*                 f4    
*----------------------------------------------------------------------*
FORM f4_help_zsjcs USING p_fieldname  TYPE lvc_fname
                         p_row_no     TYPE lvc_s_roid.
  DATAlt_dtdetail TYPE STANDARD TABLE OF ztpp_dtdetail,
        lt_return   TYPE STANDARD TABLE OF ddshretval,
        ls_return   TYPE ddshretval.

  CLEAR gw_vds.
  READ TABLE gt_vds INTO gw_vds INDEX p_row_no-row_id.

  IF p_fieldname 'ZSJCS'.

    SELECT *
      INTO TABLE lt_dtdetail
      FROM ztpp_dtdetail
     WHERE werks gw_vds-werks.

    SORT lt_dtdetail BY werks zsjcs.
    DELETE ADJACENT DUPLICATES FROM lt_dtdetail
                          COMPARING werks zsjcs.

  ENDIF.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield         'ZSJCS'            "lt       
      dynpprog         sy-repid
      dynpnr           sy-dynnr
      dynprofield      'ZSJCS'            "       
      value_org        'S'
      callback_program sy-repid
    TABLES
      value_tab        lt_dtdetail        "          
      return_tab       lt_return          "   
    EXCEPTIONS
      parameter_error  1
      no_values_found  2
      OTHERS           3.


  IF sy-subrc 0.
    READ TABLE lt_return INTO ls_return INDEX 1.
    gw_vds-zsjcs ls_return-fieldval.
    MODIFY gt_vds FROM gw_vds INDEX p_row_no-row_id
                       TRANSPORTING zsjcs.
  ENDIF.

ENDFORM.                    " F4_HELP_ZSJCS
 
 

좋은 웹페이지 즐겨찾기