ALV Tree SAP

10
SATURDAY, MAY 19, 2007 ALV Tree Orientado a Objetos Seguramente muchos de ustedes no saben como crear un ALV Tree y quizás menos sepan crearlo utilizando ABAP Orientado a Objetos...Yo hasta hace un par de semanas, tampoco sabía como hacerlo -:) Simplemente porque nunca me lo habían pedido...Así que aquí les dejo un ejemplo simple y funcional. Lo único que necesitamos es un 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,

Transcript of ALV Tree SAP

Page 1: ALV Tree SAP

S A T U R D A Y , M A Y 1 9 , 2 0 0 7

ALV Tree Orientado a Objetos

Seguramente muchos de ustedes no saben como crear un ALV Tree y quizás

menos sepan crearlo utilizando ABAP Orientado a Objetos...Yo hasta hace un par

de semanas, tampoco sabía como hacerlo -:) Simplemente porque nunca me lo

habían pedido...Así que aquí les dejo un ejemplo simple y funcional.

Lo único que necesitamos es un 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,

Page 2: ALV Tree SAP

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: <HEADER> LIKE LINE OF T_HEADER,

<SPFLI> LIKE LINE OF T_SPFLI.

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

* SELECTION-SCREEN *

Page 3: ALV Tree SAP

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

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

Page 4: ALV Tree SAP

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 *

Page 5: ALV Tree SAP

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

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

Page 6: ALV Tree SAP

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.

Page 7: ALV Tree SAP

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

* 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 <HEADER>.

CLEAR L_ROOT_KEY.

CLEAR L_NEXT_KEY.

PERFORM ADD_NODE USING <HEADER>-CARRID L_ROOT_KEY

CHANGING L_NEXT_KEY.

LOOP AT T_SPFLI ASSIGNING <SPFLI>

WHERE CARRID EQ <HEADER>-CARRID.

MOVE-CORRESPONDING <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

Page 8: ALV Tree SAP

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 *

Page 9: ALV Tree SAP

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

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

MOVE <SPFLI>-CARRID TO T_HEADER-CARRID.

APPEND T_HEADER.

ENDLOOP.

SORT T_HEADER.

DELETE ADJACENT DUPLICATES FROM T_HEADER.

ENDIF.

ENDFORM.