Está en la página 1de 16

2009

ALV GRID &


Programacin
Orientada a Objetos
Manual de Desarrollo
Ing. 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 .

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a Objetos


SELECT
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.

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a Objetos

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.

2009

Variables Globales del ALV.

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a Objetos


*Variables del ALV
DATA: go_cl_alvgrid
go_container
gtd_fieldcat
gst_layout

TYPE
TYPE
TYPE
TYPE

2009

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.

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a Objetos


ENDIF.
ENDFORM.

2009

" crear_alvgrid

La estructura de este mtodo 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.(Mto


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.

PERFORM genera_layout

" genera_catalogo

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

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin 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
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.

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin 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 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.

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,

Ing. Alexander Clen Riva Ccaccaycucho

Alv Grid - Programacin Orientada a Objetos


go_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

2009

Alv Grid - Programacin Orientada a Objetos

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 - 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
*---------------------------------------------------------------------*
*
<--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 - Programacin 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 - Programacin Orientada a Objetos

2009

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
*&--------------------------------------------------------------------*
*&
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 - Programacin Orientada a Objetos

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

2009

Alv Grid - Programacin 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

También podría gustarte