Alv Grid - Poo

Click here to load reader

  • date post

    20-Nov-2014
  • Category

    Documents

  • view

    278
  • download

    10

Embed Size (px)

Transcript of Alv Grid - Poo

2009

ALV GRID & Programacin Orientada a ObjetosManual de DesarrolloIng. Alexander Clen Riva Ccaccaycucho

World Business Partner Lima - Per 08/01/2009

Alv Grid - Programacin Orientada a Objetos

2009

1. Obtencin de la Data a mostrar en el ALV: Este procedimiento varia de acuerdo al programa que se esta desarrollando, en este caso tomaremos como ejemplo mostrar todo los proveedores. Definicin del patrn a usar para la estructura de la tabla interna a usar.TYPES: BEGIN OF ty_lfa1, LIFNR LIKE LFA1-LIFNR, NAME1 LIKE LFA1-NAME1, END OF ty_lfa1.

Declaracin de la tabla interna.DATA: ti_lfa1 TYPE STANDARD TABLE OF ty_lfa1.

Invocar al mtodo para obtener la data a mostrar.START-OF-SELECTION. PERFORM get_data. END-OF-SELECTION.

Mtodo que permite obtener la data a mostrar.FORM get_data . SELECT LIFNR NAME1 INTO TABLE ti_lfa1 FROM LFA1. ENDFORM.

Avance del Programa.TYPES: BEGIN OF ty_lfa1, LIFNR LIKE LFA1-LIFNR, NAME1 LIKE LFA1-NAME1, END OF ty_lfa1. DATA: ti_lfa1 TYPE STANDARD TABLE OF ty_lfa1. START-OF-SELECTION. PERFORM get_data. END-OF-SELECTION. *&--------------------------------------------------------------------* *& Form get_data *&--------------------------------------------------------------------* * Metodo para obtner la data que sera llenado en al A LV. *---------------------------------------------------------------------* FORM get_data .

2

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a ObjetosSELECT LIFNR NAME1 INTO TABLE ti_lfa1 FROM LFA1. ENDFORM.

2009

" get_data

2. Creacin de la dynpro 100 y 200: Crearemos la dynpro 100 donde se mostrara el AVL y al hacer doble clic en la columna Cdigo, enlazara a la dynpro 200, razn por la cual se crea la dynpro 200. Fig. 1: Dynpro 100.

Arrastramos el control contenedor, asignamos al atributo Nombre: CONTENEDOR, nombre con el cual se hace la referencia en el programa principal, finalmente activar.

Fig. 2: Dynpro 200.

3

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a Objetos

2009

En la dynpro 200, solo colocaremos un label con texto: hola mundo. En la dynpro 100, Lgica de Proceso: Descomentar STATUS_0100 para el status, Crear el Modulo CREAR_ALV apartir de este modulo se invoca a los mtodos que permiten crear el alv, Descomentar USER COMMAND_0100 para el manejor de eventos de contro del programa.PROCESS BEFORE OUTPUT. MODULE STATUS_0100. MODULE CREAR_ALV. PROCESS AFTER INPUT. MODULE USER_COMMAND_0100.

MODULE CREAR_0100.MODULE CREAR_ALV OUTPUT. PERFORM crear_alvgrid. ENDMODULE.

3. Crear el ALV. Variables Globales del ALV.

4

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a Objetos*Variables del ALV DATA: go_cl_alvgrid go_container gtd_fieldcat gst_layout

2009

TYPE TYPE TYPE TYPE

REF TO cl_gui_alv_grid, REF TO cl_gui_custom_container, lvc_t_fcat, lvc_s_layo.

Mtodo crear_alvgrid.

FORM crear_alvgrid . IF go_container IS INITIAL. CREATE OBJECT go_container EXPORTING container_name = 'CONTENEDOR' EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 OTHERS = 5. IF sy-subrc EQ 0. CREATE OBJECT go_cl_alvgrid EXPORTING i_parent = go_container. * Invocar a los metodos del objeto go_cl_alvgrid. CALL METHOD go_cl_alvgrid->REGISTER_EDIT_EVENT EXPORTING i_event_id = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED. CALL METHOD go_cl_alvgrid->REGISTER_EDIT_EVENT EXPORTING i_event_id = CL_GUI_ALV_GRID=>MC_EVT_ENTER. CALL METHOD go_cl_alvgrid->SET_READY_FOR_INPUT EXPORTING i_ready_for_input = 1. PERFORM genera_catalogo CHANGING gtd_fieldcat. PERFORM genera_layout CHANGING gst_layout. CALL METHOD go_cl_alvgrid>SET_TABLE_FOR_FIRST_DISPLAY EXPORTING is_layout = gst_layout i_save = 'A' CHANGING it_outtab = ti_lfa1[] it_fieldcatalog = gtd_fieldcat. ENDIF. ELSE. CALL METHOD go_cl_alvgrid->REFRESH_TABLE_DISPLAY.

5

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a ObjetosENDIF. ENDFORM.

2009

" crear_alvgrid

La estructura de este mtodo tener en cuenta lo siguiente: container_name = 'CONTENEDOR'(CONTENEDOR es elnombre del contenedor creado en la dynpro 100).

PERFORM genera_catalogo CHANGING gtd_fieldcat.(Mtodo para enlazar los campos de la tabla con las columnas del ALV.)

PERFORM genera_layout it_outtab

CHANGING gst_layout.(Metodo que permite determinar los atributos del ALV). = ti_lfa1[] (Tabla interna donde esta la data preparada a ser mostrara).

PERFORM genera_catalogo CHANGING gtd_fieldcat FORM genera_catalogo CHANGING po_fieldcat TYPE lvc_t_fcat.

* Ojo el nombre de la tabla interna siempre tiene que poner se aqui en * mayuscula, caso contrario no se mostrara los datos en el alv. PERFORM set_cat USING 'TI_LFA1' 'LIFNR' 'Codigo' 10 space space CHANGING po_fieldcat. PERFORM set_cat USING 'TI_LFA1' 'NAME1' 'Nombre' 10 space space CHANGING po_fieldcat. ENDFORM. " genera_catalogo

PERFORM genera_layout

CHANGING gst_layout.

FORM genera_layout CHANGING po_layout TYPE lvc_s_layo. po_layout-grid_title = 'Lista de registros'. po_layout-no_toolbar = 'X'. ENDFORM. " genera_layout

6

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a ObjetosPERFORM set_cat. FORM set_cat USING

2009

pi_log pi_field pi_texto pi_long pi_edit pi_checkbox CHANGING po_fieldcat TYPE lvc_t_fcat.

DATA: lwa_fieldcat TYPE lvc_s_fcat. lwa_fieldcat-tabname lwa_fieldcat-fieldname lwa_fieldcat-edit lwa_fieldcat-checkbox lwa_fieldcat-coltext lwa_fieldcat-seltext lwa_fieldcat-reptext lwa_fieldcat-outputlen = = = = = = = = pi_log. pi_field. pi_edit. pi_checkbox. pi_texto. pi_texto. pi_texto. pi_long.

APPEND lwa_fieldcat TO po_fieldcat. ENDFORM. " set_cat

4. Aplicacin de POO al ALV.

Definicin de la Clase: Se declaran todo los comportamientos que se requiere que soporte el ALV, tales como: button_click, double_click,hotspot_click, onDrag, onDrop, nDropComplete, onDropGetFlavor. Para este ejemplo haremos el de double_click.

CLASS gcl_event DEFINITION. PUBLIC SECTION. * Metodo double click METHODS: handle_double_click FOR event double_click OF CL_GUI_ALV_GRID IMPORTING e_row e_column. ENDCLASS.

Implementacin de los Mtodos: Se implementa cada mtodo declarado inicialmente en la clase. * Implementacion de Metodos. CLASS gcl_event IMPLEMENTATION. * Implementacion del metodo doble click METHOD handle_double_click. DATA: ltd_read TYPE STANDARD TABLE OF ty_lfa1.

7

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a ObjetosDATA: lwa_read TYPE ty_lfa1.

2009

READ TABLE ti_lfa1 INDEX e_row-index INTO lwa_read. IF e_column EQ 'LIFNR'. CALL SCREEN '0200'. ENDIF. ENDMETHOD. ENDCLASS. Instancias la Clase: En este paso creamos un objeto de la clase. * Instancia de la Clase gcl_event. DATA: go_event TYPE REF TO gcl_event. En este paso invocamos a los mtodos creados en la clase, a travs del objeto que acabamos de crear. Esto en el mtodo crear_alvgrid, de la siguiente manera. FORM crear_alvgrid . IF go_container IS INITIAL. CREATE OBJECT go_container EXPORTING container_name = 'CONTENEDOR' EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 OTHERS = 5. IF sy-subrc EQ 0. CREATE OBJECT go_cl_alvgrid EXPORTING i_parent = go_container. * Invocar a los metodos del objeto go_cl_alvgrid. CALL METHOD go_cl_alvgrid->REGISTER_EDIT_EVENT EXPORTING i_event_id = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED. CALL METHOD go_cl_alvgrid->REGISTER_EDIT_EVENT EXPORTING i_event_id = CL_GUI_ALV_GRID=>MC_EVT_ENTER. CALL METHOD go_cl_alvgrid->SET_READY_FOR_INPUT EXPORTING i_ready_for_input = 1. PERFORM genera_catalogo CHANGING gtd_fieldcat. PERFORM genera_layout CHANGING gst_layout.

8

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a Objetos

2009

CREATE OBJECT go_event. SET HANDLER go_event>handle_double_click FOR go_cl_alvgrid. CALL METHOD go_cl_alvgrid>SET_TABLE_FOR_FIRST_DISPLAY EXPORTING is_layout = gst_layout i_save = 'A' CHANGING it_outtab = ti_lfa1[] it_fieldcatalog = gtd_fieldcat. ENDIF. ELSE. CALL METHOD go_cl_alvgrid->REFRESH_TABLE_DISPLAY. ENDIF. ENDFORM. " crear_alvgrid Listo, acabamos de invocar el mtodo double_click Enlazamos la dynpro 100. START-OF-SELECTION. PERFORM get_data. CALL SCREEN '0100'. END-OF-SELECTION.

5. Programa completo.*&--------------------------------------------------------------------* *& Report ZALV_GRID_RIVA *& *&--------------------------------------------------------------------* *& *& *&--------------------------------------------------------------------* REPORT ZALV_GRID_RIVA.

TYPES: BEGIN OF ty_lfa1, LIFNR LIKE LFA1-LIFNR, NAME1 LIKE LFA1-NAME1, END OF ty_lfa1. DATA: ti_lfa1 TYPE STANDARD TABLE OF ty_lfa1. *Variables del ALV DATA: go_cl_alvgrid TYPE REF TO cl_gui_alv_grid,

9

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a Objetosgo_container gtd_fieldcat gst_layout

2009

TYPE REF TO cl_gui_custom_container, TYPE lvc_t_fcat, TYPE lvc_s_layo.

************************************************************* *** * Declarar la Clase ************************************************************* *** CLASS gcl_event DEFINITION. PUBLIC SECTION. * Metodo double click METHODS: handle_double_click FOR event double_click OF CL_GUI_ALV_GRID IMPORTING e_row e_column. ENDCLASS. * Implementacion de Metodos. CLASS gcl_event IMPLEMENTATION. * Implementacion del metodo doble click METHOD handle_double_click. DATA: ltd_read TYPE STANDARD TABLE OF ty_lfa1. DATA: lwa_read TYPE ty_lfa1. READ TABLE ti_lfa1 INDEX e_row-index INTO lwa_read. IF e_column EQ 'LIFNR'. CALL SCREEN '0200'. ENDIF. ENDMETHOD. ENDCLASS. * Instancia de la Clase gcl_event. DATA: go_event TYPE REF TO gcl_event. START-OF-SELECTION. PERFORM get_data. CALL SCREEN '0100'. END-OF-SELECTION. *&--------------------------------------------------------------------* *& Form get_data *&--------------------------------------------------------------------* * Metodo para obtner la data que sera llenado en al ALV . *---------------------------------------------------------------------* FORM get_data . SELECT LIFNR

10

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a Objetos

2009

NAME1 INTO TABLE ti_lfa1 FROM LFA1. ENDFORM. " get_data *&--------------------------------------------------------------------* *& Module CREAR_ALV OUTPUT *&--------------------------------------------------------------------* * Modulo que permite crear el alv. *---------------------------------------------------------------------* MODULE CREAR_ALV OUTPUT. PERFORM crear_alvgrid. ENDMODULE. " CREAR_ALV OUTPUT

*&--------------------------------------------------------------------* *& Form crear_alvgrid *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* * --> p1 text * REGISTER_EDIT_EVENT EXPORTING i_event_id = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.

11

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a Objetos

2009

CALL METHOD go_cl_alvgrid->REGISTER_EDIT_EVENT EXPORTING i_event_id = CL_GUI_ALV_GRID=>MC_EVT_ENTER. CALL METHOD go_cl_alvgrid->SET_READY_FOR_INPUT EXPORTING i_ready_for_input = 1. PERFORM genera_catalogo CHANGING gtd_fieldcat. PERFORM genera_layout CHANGING gst_layout. CREATE OBJECT go_event. SET HANDLER go_event>handle_double_click FOR go_cl_alvgrid. CALL METHOD go_cl_alvgrid>SET_TABLE_FOR_FIRST_DISPLAY EXPORTING is_layout = gst_layout i_save = 'A' CHANGING it_outtab = ti_lfa1[] it_fieldcatalog = gtd_fieldcat. ENDIF. ELSE. CALL METHOD go_cl_alvgrid->REFRESH_TABLE_DISPLAY. ENDIF. ENDFORM. " crear_alvgrid *&--------------------------------------------------------------------* *& Form genera_catalogo *&--------------------------------------------------------------------* * Metodo que permite Crear las columnas del AVL: campos de la tabla *---------------------------------------------------------------------* *