domingo, 17 de marzo de 2013

ALV - OO - ALV Tree Orientado a Objetos

Aquí dejo un breve ejemplo de como crear un ALV Tree, ABAP Orientado a Objeto.

Lo único que necesitamos además de este código es una Dynpro 100, con un Custom Contro llamado TREE_CONTROL.


*----------------------------------*


REPORT Z_ALV_TREE.




*——————————————————————*
* DECLARACION DE TYPES *
*——————————————————————*
TYPES: BEGIN OF TY_SPFLI,
CARRID TYPE SPFLI-CARRID,
CONNID TYPE SPFLI-CONNID,
COUNTRYFR TYPE SPFLI-COUNTRYFR,
CITYFROM TYPE SPFLI-CITYFROM,
AIRPFROM TYPE SPFLI-AIRPFROM,
COUNTRYTO TYPE SPFLI-COUNTRYTO,
CITYTO TYPE SPFLI-CITYTO,
END OF TY_SPFLI.




TYPES: BEGIN OF TY_HEADER,
CARRID TYPE SPFLI-CARRID,
END OF TY_HEADER.




*—————————————————————–*
* DECLARACION DE TABLAS INTERNAS *
*—————————————————————–*
DATA: T_SPFLI TYPE STANDARD TABLE OF TY_SPFLI
WITH HEADER LINE,
TAB_TREE TYPE STANDARD TABLE OF TY_SPFLI
WITH HEADER LINE,
T_TREE TYPE STANDARD TABLE OF TY_SPFLI
WITH HEADER LINE,
T_HEADER TYPE STANDARD TABLE OF TY_HEADER
WITH HEADER LINE.




*—————————————————————–*
* DECLARACION DE VARIABLES *
*—————————————————————–*
DATA: G_ALV_TREE TYPE REF TO CL_GUI_ALV_TREE,
L_HIERARCHY_HEADER TYPE TREEV_HHDR,
GS_FIELDCAT TYPE LVC_S_FCAT,
GT_FIELDCAT_TREE TYPE LVC_T_FCAT,
G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.




*—————————————————————–*
* DECLARACION DE FIELD-SYMBOLS *
*—————————————————————–*
FIELD-SYMBOLS: &lt,HEADER> LIKE LINE OF T_HEADER,
&lt,SPFLI> LIKE LINE OF T_SPFLI.




*—————————————————————–*
* SELECTION-SCREEN *
*—————————————————————–*
SELECTION-SCREEN BEGIN OF SCREEN 1001.
SELECTION-SCREEN END OF SCREEN 1001.




*—————————————————————–*
* START-OF-SELECTION *
*—————————————————————–*
START-OF-SELECTION.




PERFORM OBTENER_DATOS.




IF G_ALV_TREE IS INITIAL.
PERFORM INIT_TREE.




CALL METHOD CL_GUI_CFW=>FLUSH
EXCEPTIONS CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2.
ENDIF.




CALL SCREEN 100.




*—————————————————————–*
* FORM init_tree *
*—————————————————————–*
FORM INIT_TREE.




DATA: L_TREE_CONTAINER_NAME(30) TYPE C.




L_TREE_CONTAINER_NAME = ‘TREE_CONTROL’.




CREATE OBJECT G_CUSTOM_CONTAINER
EXPORTING
CONTAINER_NAME = L_TREE_CONTAINER_NAME
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5.




CREATE OBJECT G_ALV_TREE
EXPORTING
PARENT = G_CUSTOM_CONTAINER
NODE_SELECTION_MODE = CL_GUI_COLUMN_TREE=>NODE_SEL_MODE_SINGLE
ITEM_SELECTION = ”
NO_HTML_HEADER = ‘X’
NO_TOOLBAR = ”
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
ILLEGAL_NODE_SELECTION_MODE = 5
FAILED = 6
ILLEGAL_COLUMN_NAME = 7.




PERFORM FILL_CATALOG_TREE.
PERFORM BUILD_HIERARCHY_HEADER CHANGING L_HIERARCHY_HEADER.




CALL METHOD G_ALV_TREE->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_HIERARCHY_HEADER = L_HIERARCHY_HEADER
CHANGING
IT_OUTTAB = T_TREE[]
IT_FIELDCATALOG = GT_FIELDCAT_TREE.




PERFORM CREATE_HIERARCHY.




ENDFORM.




*—————————————————————–*
* FORM FILL_CATALOG_TREE *
*—————————————————————–*
FORM FILL_CATALOG_TREE.




DATA: GS_FIELDCAT_ADD TYPE LVC_S_FCAT.




CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 1.
GS_FIELDCAT-REPTEXT = ‘Flight’.
GS_FIELDCAT-SCRTEXT_S = ‘Flight’.
GS_FIELDCAT-FIELDNAME = ‘CONNID’.
GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.




CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 2.
GS_FIELDCAT-REPTEXT = ‘Country’.
GS_FIELDCAT-SCRTEXT_S = ‘Country’.
GS_FIELDCAT-FIELDNAME = ‘COUNTRYFR’.
GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.




CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 3.
GS_FIELDCAT-REPTEXT = ‘Dep.City’.
GS_FIELDCAT-SCRTEXT_S = ‘Dep.City’.
GS_FIELDCAT-FIELDNAME = ‘CITYFROM’.
GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
GS_FIELDCAT-OUTPUTLEN = ‘15′.
APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.




CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 4.
GS_FIELDCAT-REPTEXT = ‘Dep.Airp’.
GS_FIELDCAT-SCRTEXT_S = ‘Dep.Airp’.
GS_FIELDCAT-FIELDNAME = ‘AIRPFROM’.
GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
GS_FIELDCAT-OUTPUTLEN = ‘20′.
APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.




CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 5.
GS_FIELDCAT-REPTEXT = ‘Country’.
GS_FIELDCAT-SCRTEXT_S = ‘Country’.
GS_FIELDCAT-FIELDNAME = ‘COUNTRYTO’.
GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
GS_FIELDCAT-OUTPUTLEN = ‘15′.
APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.




CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 6.
GS_FIELDCAT-REPTEXT = ‘Arr.City’.
GS_FIELDCAT-SCRTEXT_S = ‘Arr.City’.
GS_FIELDCAT-FIELDNAME = ‘CITYTO’.
GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
GS_FIELDCAT-OUTPUTLEN = ‘20′.
APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.




ENDFORM.




*———————————————————————*
* FORM build_hierarchy_header *
*———————————————————————*
FORM BUILD_HIERARCHY_HEADER CHANGING
P_HIERARCHY_HEADER TYPE TREEV_HHDR.




CLEAR P_HIERARCHY_HEADER.
P_HIERARCHY_HEADER-HEADING = ‘Airline carrier’(300).
P_HIERARCHY_HEADER-WIDTH = 18.
P_HIERARCHY_HEADER-WIDTH_PIX = ‘ ‘.




ENDFORM.




*———————————————————————*
* FORM create_hierarchy *
*———————————————————————*
FORM CREATE_HIERARCHY.




DATA: L_ROOT_KEY TYPE LVC_NKEY,
L_NEXT_KEY TYPE LVC_NKEY,
L_LAST_KEY TYPE LVC_NKEY,
HEADER TYPE STRING,
W_MENGE_TEXT(13) TYPE C.




CLEAR L_ROOT_KEY.




LOOP AT T_HEADER ASSIGNING &lt,HEADER>.
CLEAR L_ROOT_KEY.
CLEAR L_NEXT_KEY.
PERFORM ADD_NODE USING &lt,HEADER>-CARRID L_ROOT_KEY
CHANGING L_NEXT_KEY.
LOOP AT T_SPFLI ASSIGNING &lt,SPFLI>
WHERE CARRID EQ &lt,HEADER>-CARRID.




MOVE-CORRESPONDING &lt,SPFLI> TO TAB_TREE.




PERFORM ADD_LEAF USING TAB_TREE L_NEXT_KEY
CHANGING L_LAST_KEY.
ENDLOOP.
ENDLOOP.




CALL METHOD G_ALV_TREE->FRONTEND_UPDATE.




ENDFORM.




*———————————————————————*
* FORM ADD_NODE *
*———————————————————————*
FORM ADD_NODE USING L_NAME L_ROOT_KEY
CHANGING L_NEXT_KEY.




DATA: L_NODE_TEXT TYPE LVC_VALUE,
LS_TREE TYPE TY_SPFLI.




L_NODE_TEXT = L_NAME.
CALL METHOD G_ALV_TREE->ADD_NODE
EXPORTING
I_RELAT_NODE_KEY = L_ROOT_KEY
I_RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD
I_NODE_TEXT = L_NODE_TEXT
IS_OUTTAB_LINE = LS_TREE
IMPORTING
E_NEW_NODE_KEY = L_NEXT_KEY.




ENDFORM.




*———————————————————————*
* FORM ADD_LEAF *
*———————————————————————*
FORM ADD_LEAF USING L_TREE TYPE TY_SPFLI
L_NEXT_KEY
CHANGING L_LAST_KEY.




CALL METHOD G_ALV_TREE->ADD_NODE
EXPORTING
I_RELAT_NODE_KEY = L_NEXT_KEY
I_RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD
IS_OUTTAB_LINE = TAB_TREE
IMPORTING
E_NEW_NODE_KEY = L_LAST_KEY.




ENDFORM.




*———————————————————————*
* FORM OBTENER_DATOS *
*———————————————————————*
FORM OBTENER_DATOS.




SELECT CARRID CONNID COUNTRYFR CITYFROM
AIRPFROM COUNTRYTO CITYTO
INTO TABLE T_SPFLI
FROM SPFLI.




IF SY-SUBRC EQ 0.
LOOP AT T_SPFLI ASSIGNING &lt,SPFLI>.
MOVE &lt,SPFLI>-CARRID TO T_HEADER-CARRID.
APPEND T_HEADER.
ENDLOOP.




SORT T_HEADER.
DELETE ADJACENT DUPLICATES FROM T_HEADER.




ENDIF.


ENDFORM.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.