Anda di halaman 1dari 16

2009

ALV GRID &


Programación
Orientada a Objetos
Manual de Desarrollo
Ing. Alexander Clen Riva Ccaccaycucho

World Business Partner


Lima - Perú
08/01/2009
Alv Grid - Programación Orientada a Objetos 2009
1. Obtención 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.

 Definición del patrón 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.

 Declaración de la tabla interna.

DATA: ti_lfa1 TYPE STANDARD TABLE OF ty_lfa1.

 Invocar al método para obtener la data a mostrar.

START-OF-SELECTION.
PERFORM get_data.
END-OF-SELECTION.

 Método 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 - Programación Orientada a Objetos 2009
SELECT
LIFNR
NAME1
INTO TABLE ti_lfa1
FROM LFA1.
ENDFORM. " get_data

2. Creación de la dynpro 100 y 200: Crearemos la dynpro 100 donde se mostrara el AVL y
al hacer doble clic en la columna “Código”, enlazara a la dynpro 200, razón 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 - Programación Orientada a Objetos 2009

 En la dynpro 200, solo colocaremos un label con texto: “hola mundo”.

 En la dynpro 100, Lógica de Proceso: Descomentar STATUS_0100 para el


status, Crear el Modulo CREAR_ALV apartir de este modulo se invoca a los
métodos 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 - Programación Orientada a Objetos 2009
*Variables del ALV
DATA: go_cl_alvgrid TYPE REF TO cl_gui_alv_grid,
go_container TYPE REF TO cl_gui_custom_container,
gtd_fieldcat TYPE lvc_t_fcat,
gst_layout TYPE lvc_s_layo.

 Método 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 - Programación Orientada a Objetos 2009
ENDIF.
ENDFORM. " crear_alvgrid

La estructura de este método tener en cuenta lo siguiente:

 container_name = 'CONTENEDOR'(‘CONTENEDOR’ es el
nombre del contenedor creado en la dynpro 100).

 PERFORM genera_catalogo CHANGING gtd_fieldcat.(Méto


do para enlazar los campos de la tabla con las
columnas del ALV.)

 PERFORM genera_layout CHANGING gst_layout.(Metodo


que permite determinar los atributos del ALV).

 it_outtab = 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 - Programación Orientada a Objetos 2009
 PERFORM set_cat.

FORM set_cat USING 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 = pi_log.
lwa_fieldcat-fieldname = pi_field.
lwa_fieldcat-edit = pi_edit.
lwa_fieldcat-checkbox = pi_checkbox.
lwa_fieldcat-coltext = pi_texto.
lwa_fieldcat-seltext = pi_texto.
lwa_fieldcat-reptext = pi_texto.
lwa_fieldcat-outputlen = pi_long.

APPEND lwa_fieldcat TO po_fieldcat.

ENDFORM. " set_cat

4. Aplicación de POO al ALV.

 Definición 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.

 Implementación de los Métodos: Se implementa cada método


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 - Programación Orientada a Objetos 2009
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.

 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 métodos creados en la clase,


a través del objeto que acabamos de crear. Esto en el
método 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 - Programación 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 método 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 - Programación Orientada a Objetos 2009
go_container TYPE REF TO cl_gui_custom_container,
gtd_fieldcat TYPE lvc_t_fcat,
gst_layout 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 - Programación 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
* <-- p2 text
*------------------------------------------------------------
----------*
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.

11 Ing. Alexander Clen Riva Ccaccaycucho


Alv Grid - Programación 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
*------------------------------------------------------------
----------*
* <--P_GTD_FIELDCAT text
*------------------------------------------------------------
----------*
FORM genera_catalogo CHANGING po_fieldcat TYPE lvc_t_fcat.

* Ojo el nombre de la tabla interna siempre tiene que ponerse


aqui en
* mayuscula, caso contrario no se mostrara los datos en el al
v.

PERFORM set_cat USING 'TI_LFA1'


'LIFNR'
'Codigo'
10
space
space

12 Ing. Alexander Clen Riva Ccaccaycucho


Alv Grid - Programación Orientada a Objetos 2009
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_LFA1'


'NAME1'
'Nombre'
10
space
space
CHANGING po_fieldcat.

*
*PERFORM set_cat USING 'TABLITA'
* 'CHECK'
* 'Eliminar'
* 10
* 'X'
* 'X'
* CHANGING po_fieldcat.

ENDFORM. " genera_catalogo


*&-----------------------------------------------------------
----------*
*& Form genera_layout
*&-----------------------------------------------------------
----------*
* Metodos que permite determinar los atributos del ALV.
*------------------------------------------------------------
----------*
* <--P_GST_LAYOUT text
*------------------------------------------------------------
----------*
FORM genera_layout CHANGING po_layout TYPE lvc_s_layo.
po_layout-grid_title = 'Lista de registros'.
po_layout-no_toolbar = 'X'.
* po_layout-box_fname = 'CHECK'.
ENDFORM. " genera_layout
*&-----------------------------------------------------------
----------*
*& Form set_cat
*&-----------------------------------------------------------
----------*
* text
*------------------------------------------------------------
----------*
FORM set_cat USING pi_log
pi_field
pi_texto
pi_long
pi_edit
pi_checkbox
CHANGING po_fieldcat TYPE lvc_t_fcat.

13 Ing. Alexander Clen Riva Ccaccaycucho


Alv Grid - Programación Orientada a Objetos 2009
DATA: lwa_fieldcat TYPE lvc_s_fcat.

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

APPEND lwa_fieldcat TO po_fieldcat.

ENDFORM. " set_cat


*&-----------------------------------------------------------
----------*
*& Module USER_COMMAND_0100 INPUT
*&-----------------------------------------------------------
----------*
* text
*------------------------------------------------------------
----------*
MODULE USER_COMMAND_0100 INPUT.
IF sy-ucomm EQ 'CLOSE'.
LEAVE PROGRAM.
ENDIF.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&-----------------------------------------------------------
----------*
*& Module STATUS_0100 OUTPUT
*&-----------------------------------------------------------
----------*
* text
*------------------------------------------------------------
----------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'STATUS100'.
* SET TITLEBAR 'xxx'.

ENDMODULE. " STATUS_0100 OUTPUT


*&-----------------------------------------------------------
----------*
*& Module USER_COMMAND_0200 INPUT
*&-----------------------------------------------------------
----------*
* text
*------------------------------------------------------------
----------*
MODULE USER_COMMAND_0200 INPUT.
IF sy-ucomm EQ 'CLOSE'.
CALL SCREEN '0100'.
ENDIF.
ENDMODULE. " USER_COMMAND_0200 INPUT

14 Ing. Alexander Clen Riva Ccaccaycucho


Alv Grid - Programación Orientada a Objetos 2009

6. Resultado

Fig. 4: Dynpro 100 mostrando el Alv con datos.

 Doble clic en cualquier celda de la columna “codigo”.

Fig.4: Dynpro 200.

15 Ing. Alexander Clen Riva Ccaccaycucho


Alv Grid - Programación Orientada a Objetos 2009

Bueno este fue un ejemplito que queria compartir con Uds.


”El conocimiento humano pertenece al mundo” .

16 Ing. Alexander Clen Riva Ccaccaycucho

Anda mungkin juga menyukai