✒️ABAP La creación de un ALV TREE orientado a objetos
ABAP La creación de un ALV TREE orientado a objetos
1 | ALV TREE orientado a objetos
Existen muchos programas estándar muy útiles que podemos tener en cuenta a la hora de querer implementar diferentes funcionalidades a un ALV TREE.
Algunos de ellos son:
BCALV_TREE_01
BCALV_TREE_02
BCALV_TREE_03
BCALV_TREE_04
BCALV_TREE_05
BCALV_TREE_0
BCALV_TREE_DND_MULTIPLE
A parte de la clase CL_GUI_ALV_TREE existe otra clase estándar de ABAP
que podemos utilizar para la creación de los ALV TREEs orientados a objetos.
Esta clase es la clase CL_GUI_ALV_TREE_SIMPLE.
Vale la pena destacar que mediante la utilización de la clase CL_GUI_ALV_TREE_SIMPLE
no es posible crear una jerarquía tal como hacemos con la clase CL_GUI_ALV_TREE.
Podemos tomar como ejemplo el programa estándar BCALV_TREE_SIMPLE_DEMO, el cual nos va a servir de referencia para aprender
a generar reportes ALV TREEs Orientados a Objetos utilizando la clase CL_GUI_ALV_TREE_SIMPLE.
2 | Video
En este video se aprendera a crear un ALV TREE orientado a objetos
para ello construiremos el programa Z el cual llena con datos la tabla estandar SPFLI que contiene información sobre vuelos.
REPORT ZCVS_A2M5L9C1_ALV_TREE_DATOS.
*----------------------------------------------------------------------*
* DECLARACION DE TABLAS INTERNAS
*----------------------------------------------------------------------*
DATA: ti_spfli TYPE STANDARD TABLE OF spfli,
wa_spfli LIKE LINE OF ti_spfli.
luego construiremos el programa ZALVTREE
Los puntos mas importantes a tener en cuenta en el programa son
Declaramos una tabla interna con 7 campos la cual se mostrara por pantalla
*----------------------------------------------------------------------*
* 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.
Declaramos unas variables para instanciar la clase CL_GUI_ALV_TREE y otra para instanciar la clase CL_GUI_CUSTOM_CONTAIN
*----------------------------------------------------------------------*
* 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.
Dentro del evento START-OF-SELECCTION construimos la sub rutina OBTENER_DATOS
PERFORM obtener_datos.
La cual recupera todos los datos de la tabla SPFLI.
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. "OBTENER_DATOS
Luego si el árbol no fue instanciado todavía construir una instancia del arbol
IF g_alv_tree IS INITIAL.
* Se crearán los objetos correspondientes al CONTAINER y el ALV TREE
PERFORM init_tree.
y el contenido
FORM init_tree.
DATA: l_tree_container_name(30) TYPE c.
l_tree_container_name = 'TREE_CONTROL'.
* Creamos el objeto CONTAINER
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.
* Creamos el objeto del ALV TREE
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.
Mediante la sub rutina FILL_CATALOG_TREE
* Completamos el catálogo
PERFORM fill_catalog_tree.
Llenamos el catalogo
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.
…
construimos la jerarquía de los datos mediante las sub rutinas BUILD_HEARARCHY_HEADER y CREATE_HER
* Construimos la jerarquia del ALV TREE
PERFORM build_hierarchy_header CHANGING l_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. "BUILD_HIERARCHY_HEADER
*----------------------------------------------------------------------*
Por ultimo llamamos al método SET_TABLE_FOR_FIRST_DISPLAY para mostrar el ALV por pantalla
* Ejecutamos el método que muestra el ALV
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.
también debemos crear una DINPRO en donde colocaremos el CASTON CONTROL que contenga el ALV TREE
Y un STATUS GUI para navegar entre pantallas
si ejecutamos por pantalla veremos la salida del mismo por pantalla
 
 
 
Sobre el autor
Publicación académica de Alex Francisco Lemos Collazos, en su ámbito de estudios para la Carrera Consultor ABAP.
Alex Francisco Lemos Collazos
Profesión: Ingeniero en Sistemas - Colombia - Legajo: QS36A
✒️Autor de: 174 Publicaciones Académicas
🎓Cursando Actualmente: Master S/4HANA Material Management
🎓Egresado de los módulos:
- Máster Material Management en SAP S/4HANA LOGISTIC
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor en SAP SD Nivel Inicial