Wednesday, April 04, 2007

Celdas editables en ALV OO


En el proyecto en el que estoy actualmente, debo utilizar lo más posible ABAP Orientado a Objetos...Sobre todo en ALV...Y gracias a un requerimiento, pude hacer este pequeño programa de ejemplo.



*&-----------------------------------------------------------*
*& Report Z_DUMMY_ATG
*&-----------------------------------------------------------*

REPORT Z_DUMMY_ATG NO STANDARD PAGE HEADING.

TABLES: SPFLI.

*============================================================
* Variables
*============================================================

DATA: OK_CODE TYPE SY-UCOMM,
L_MODE TYPE RAW4,
W_TABIX TYPE SY-TABIX.

*============================================================
* Tablas internas
*============================================================
DATA: L_S_LAYO TYPE LVC_S_LAYO.

DATA: WA_EDIT TYPE LVC_T_STYL WITH HEADER LINE.
DATA: IT_EDIT TYPE LVC_T_STYL WITH HEADER LINE.

DATA: BEGIN OF G_WA_SFLIGHT.
INCLUDE STRUCTURE SPFLI.
DATA: CELL_TAB TYPE LVC_T_STYL.
DATA: END OF G_WA_SFLIGHT.

TYPES: BEGIN OF SPFLI_TAB.
INCLUDE STRUCTURE SPFLI.
TYPES: CELL_TAB TYPE LVC_T_STYL.
TYPES: END OF SPFLI_TAB.

TYPES: SPFLI_TABS TYPE STANDARD TABLE OF SPFLI_TAB.

DATA: GI_SFLIGHT TYPE SPFLI_TABS.

DATA: BEGIN OF AUX_TAB OCCURS 0,
CARRID LIKE SPFLI-CARRID,
CONNID LIKE SPFLI-CONNID,
CITYFROM LIKE SPFLI-CITYFROM,
AIRPFROM LIKE SPFLI-AIRPFROM,
CITYTO LIKE SPFLI-CITYTO,
AIRPTO LIKE SPFLI-AIRPTO,
END OF AUX_TAB.

DATA: SPFLI_TAB_WA LIKE G_WA_SFLIGHT.
FIELD-SYMBOLS: <SF> STRUCTURE G_WA_SFLIGHT
DEFAULT SPFLI_TAB_WA.

*============================================================
* Objetos
*============================================================

DATA: CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
ALV_LIST TYPE REF TO CL_GUI_ALV_GRID.

*============================================================
* Selección de Datos
*============================================================

SELECT *
FROM SPFLI
INTO CORRESPONDING FIELDS OF TABLE AUX_TAB .

LOOP AT AUX_TAB.
MOVE-CORRESPONDING AUX_TAB TO <SF>.
APPEND <SF> TO GI_SFLIGHT.
ENDLOOP.

*============================================================
* Instancimiento de Objetos
*============================================================

CREATE OBJECT CONTAINER
EXPORTING CONTAINER_NAME = 'LIST_AREA'.

CREATE OBJECT ALV_LIST
EXPORTING I_PARENT = CONTAINER.

*============================================================
* Procesamiento
*============================================================

LOOP AT GI_SFLIGHT INTO G_WA_SFLIGHT.
W_TABIX = SY-TABIX.
IF G_WA_SFLIGHT-CITYTO EQ 'SAN FRANCISCO'.
L_MODE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.
MOVE 'CITYTO' TO WA_EDIT-FIELDNAME.
MOVE L_MODE TO WA_EDIT-STYLE.
INSERT WA_EDIT INTO IT_EDIT INDEX W_TABIX.
G_WA_SFLIGHT-CELL_TAB[] = IT_EDIT[].
ENDIF.
MODIFY GI_SFLIGHT FROM G_WA_SFLIGHT.
ENDLOOP.

MOVE 'CELL_TAB' TO L_S_LAYO-STYLEFNAME.

CALL METHOD ALV_LIST->SET_READY_FOR_INPUT
EXPORTING I_READY_FOR_INPUT = 1.

CALL METHOD ALV_LIST->SET_TABLE_FOR_FIRST_DISPLAY(
EXPORTING I_STRUCTURE_NAME = 'SPFLI'
IS_LAYOUT = L_S_LAYO
CHANGING IT_OUTTAB = GI_SFLIGHT ).

*============================================================
* Dynpro
*============================================================

CALL SCREEN 100.

*&-----------------------------------------------------------
*& Module STATUS_0100 OUTPUT
*&-----------------------------------------------------------
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS '100'.
ENDMODULE.

*&-----------------------------------------------------------
*& Module USER_COMMAND_0100 INPUT
*&-----------------------------------------------------------
MODULE USER_COMMAND_0100 INPUT.
OK_CODE = SY-UCOMM.
IF OK_CODE = 'BACK'.
SET SCREEN 0.
LEAVE SCREEN.
CLEAR OK_CODE.
ENDIF.
ENDMODULE.


Saludos,

Blag.


Technorati tags:

3 comments:

Deskter said...

Gracias, estaba empezando yo tambien con ALV con Objetos y este codigo me ayuda bastante.

Yo estoy leyendo el "An easy reference for ALV GRID CONTROL" si te interesa te lo envio

Cesar said...

Estimado, copie y pegue este pgma. y al verificar me da el siguiente error

"Statement concluding with "...TO" ended unexpectedly"

El error esta en la linea del MOVE-CORRESTONDING ...

LOOP AT AUX_TAB.
MOVE-CORRESPONDING AUX_TAB TO .
APPEND TO GI_SFLIGHT.
ENDLOOP.

Soy nuevo en Abap, y necesito hacer una aplicacion como esta.

Mi nombre: Cesar carreño
Mi Correo: cekarc@gmail.com

Alvaro "Blag" Tejada Galindo said...

Cesar:

Ya está corregido -:) Me había olvidado de reemplazar algunos símbolos en el código.

Saludos,

Blag.