PDA

Ver la Versión Completa : Problema con el ALV TREE


Oboros
24/11/14, 16:44:56
Muy buenas a todos

Tengo una tabla en la que meteré en un futuro documentación, mi intención es visualizar toda la documentación que hay mediante un alv tree. Ahora estoy con la creación en una screen del alv tree, pero me da un error, y la verdad es que no se en que estoy fallando.

Mi intención es que cuando funcione este alv tree, es ponerle abajo 3 botones (lo tengo pintado en el Tainter screener) que serán:

Descargar Documento
Insertar Documento
Eliminar Documento

La verdad es que no se si se podrá hacer lo que quiero, pero quiero intentarlo.

Muchas gracias por todo!

Los campos de la tabla son los siguientes:

Mandt
idCurso -> El curso al que pertenece el documento.
Grupo -> Si el curso es de Mañana, tarde o noche
idNodo -> La id del documento
Nodo1 -> Es la id del padre (si tiene padre)
Nombre -> Nombre del documento
Ruta -> Ruta del documento en el que esta guardado.

Mi código es el siguiente:

MODULE STATUS_0220 OUTPUT.

TYPES: BEGIN OF ty_tree,
mandt TYPE string,
idcurso TYPE string,
grupo TYPE string,
idnodo TYPE string,
nodo1 TYPE string,
nombre TYPE string,
ruta TYPE string,
END OF ty_tree.

DATA: gr_tree TYPE REF TO CL_SALV_TREE,
gt_estructura_arbol TYPE STANDARD TABLE OF ty_tree, "Tabla con la estructura de campos
"para la SALV tree
gr_nodos TYPE REF TO CL_SALV_NODES,
gt_nodo1 TYPE STANDARD TABLE OF zdocumentacion,
gt_nodo2 TYPE STANDARD TABLE OF zdocumentacion,
v_texto TYPE TEXT128,
gr_nodo TYPE REF TO CL_SALV_NODE,
w_documentacion TYPE ty_tree.

FIELD-SYMBOLS: <nodo1> LIKE LINE OF gt_nodo1,
<nodo2> LIKE LINE OF gt_nodo2.

GET PARAMETER ID 'CURS' FIELD v_curso.

CL_SALV_TREE=>FACTORY(
IMPORTING
R_SALV_TREE = gr_tree
CHANGING
T_TABLE = gt_estructura_arbol
).

SELECT *
INTO TABLE gt_nodo1
FROM zdocumentacion
WHERE idcurso = v_curso.

gt_nodo2[] = gt_nodo1[].

gr_nodos = gr_tree->GET_NODES( ).

LOOP AT gt_nodo1 ASSIGNING <nodo1> WHERE nodo1 = ''.

v_texto = <nodo1>-nombre.

gr_nodos->ADD_NODE(
EXPORTING
RELATED_NODE = ''
RELATIONSHIP = IF_SALV_C_NODE_RELATION=>PARENT
TEXT = v_texto
FOLDER = abap_true
RECEIVING
NODE = gr_nodo
).

LOOP AT gt_nodo2 ASSIGNING <nodo2> WHERE nodo1 = <nodo1>-idnodo.
v_texto = <nodo2>-nombre.

w_documentacion-mandt = <nodo2>-mandt.
w_documentacion-idcurso = <nodo2>-idnodo.
w_documentacion-grupo = <nodo2>-grupo.
w_documentacion-nodo1 = <nodo2>-nodo1.
w_documentacion-nombre = <nodo2>-nombre.
w_documentacion-ruta = <nodo2>-ruta.

gr_nodos->ADD_NODE(
EXPORTING
RELATED_NODE = gr_nodo->GET_KEY( )
RELATIONSHIP = IF_SALV_C_NODE_RELATION=>FIRST_CHILD
DATA_ROW = w_documentacion
TEXT = v_texto
FOLDER = abap_false
).

ENDLOOP.
ENDLOOP.

"Ajusta el tamaño de las columnas a su contenido
gr_tree->GET_COLUMNS( )->SET_OPTIMIZE( abap_true ).
gr_tree->get_columns( )->GET_COLUMN( 'Mandt' )->SET_VISIBLE( abap_false ). "Ocultamos columna mandante
gr_tree->get_columns( )->GET_COLUMN( 'idcurso' )->SET_VISIBLE( abap_false ). "Ocultamos columna idcurso
gr_tree->get_columns( )->GET_COLUMN( 'grupo' )->SET_VISIBLE( abap_false ). "Ocultamos columna grupo
gr_tree->get_columns( )->GET_COLUMN( 'idnodo' )->SET_VISIBLE( abap_false ). "Ocultamos columna idnodo
gr_tree->get_columns( )->GET_COLUMN( 'nodo1' )->SET_VISIBLE( abap_false ). "Ocultamos columna nodo1
gr_tree->get_columns( )->GET_COLUMN( 'ruta' )->SET_VISIBLE( abap_false ). "Ocultamos columna ruta

"Ponemos texto en las cabeceras de la columna
gr_tree->get_columns( )->GET_COLUMN( 'Nombre' )->SET_LONG_TEXT( 'Nombre' ).

gr_tree->GET_TREE_SETTINGS( )->SET_HIERARCHY_HEADER( 'Género' ). "Ponemos titulo en la columna del árbol
gr_nodos->EXPAND_ALL( ). "Expande todos los nodos

"Mostramos la ALV
gr_tree->DISPLAY( ).
ENDMODULE. " STATUS_0220 OUTPUT

---------------------------------------------------------------------------------------
:confused: ¿Habría que pintar la ALV en el Painter o simplemente con esto ya estaria pintado? Nunca me ha dejado claro eso :confused:

lfarro
04/09/15, 18:00:38
Muy buenas a todos

Tengo una tabla en la que meteré en un futuro documentación, mi intención es visualizar toda la documentación que hay mediante un alv tree. Ahora estoy con la creación en una screen del alv tree, pero me da un error, y la verdad es que no se en que estoy fallando.

Mi intención es que cuando funcione este alv tree, es ponerle abajo 3 botones (lo tengo pintado en el Tainter screener) que serán:

Descargar Documento
Insertar Documento
Eliminar Documento

La verdad es que no se si se podrá hacer lo que quiero, pero quiero intentarlo.

Muchas gracias por todo!

Los campos de la tabla son los siguientes:

Mandt
idCurso -> El curso al que pertenece el documento.
Grupo -> Si el curso es de Mañana, tarde o noche
idNodo -> La id del documento
Nodo1 -> Es la id del padre (si tiene padre)
Nombre -> Nombre del documento
Ruta -> Ruta del documento en el que esta guardado.

Mi código es el siguiente:

MODULE STATUS_0220 OUTPUT.

TYPES: BEGIN OF ty_tree,
mandt TYPE string,
idcurso TYPE string,
grupo TYPE string,
idnodo TYPE string,
nodo1 TYPE string,
nombre TYPE string,
ruta TYPE string,
END OF ty_tree.

DATA: gr_tree TYPE REF TO CL_SALV_TREE,
gt_estructura_arbol TYPE STANDARD TABLE OF ty_tree, "Tabla con la estructura de campos
"para la SALV tree
gr_nodos TYPE REF TO CL_SALV_NODES,
gt_nodo1 TYPE STANDARD TABLE OF zdocumentacion,
gt_nodo2 TYPE STANDARD TABLE OF zdocumentacion,
v_texto TYPE TEXT128,
gr_nodo TYPE REF TO CL_SALV_NODE,
w_documentacion TYPE ty_tree.

FIELD-SYMBOLS: <nodo1> LIKE LINE OF gt_nodo1,
<nodo2> LIKE LINE OF gt_nodo2.

GET PARAMETER ID 'CURS' FIELD v_curso.

CL_SALV_TREE=>FACTORY(
IMPORTING
R_SALV_TREE = gr_tree
CHANGING
T_TABLE = gt_estructura_arbol
).

SELECT *
INTO TABLE gt_nodo1
FROM zdocumentacion
WHERE idcurso = v_curso.

gt_nodo2[] = gt_nodo1[].

gr_nodos = gr_tree->GET_NODES( ).

LOOP AT gt_nodo1 ASSIGNING <nodo1> WHERE nodo1 = ''.

v_texto = <nodo1>-nombre.

gr_nodos->ADD_NODE(
EXPORTING
RELATED_NODE = ''
RELATIONSHIP = IF_SALV_C_NODE_RELATION=>PARENT
TEXT = v_texto
FOLDER = abap_true
RECEIVING
NODE = gr_nodo
).

LOOP AT gt_nodo2 ASSIGNING <nodo2> WHERE nodo1 = <nodo1>-idnodo.
v_texto = <nodo2>-nombre.

w_documentacion-mandt = <nodo2>-mandt.
w_documentacion-idcurso = <nodo2>-idnodo.
w_documentacion-grupo = <nodo2>-grupo.
w_documentacion-nodo1 = <nodo2>-nodo1.
w_documentacion-nombre = <nodo2>-nombre.
w_documentacion-ruta = <nodo2>-ruta.

gr_nodos->ADD_NODE(
EXPORTING
RELATED_NODE = gr_nodo->GET_KEY( )
RELATIONSHIP = IF_SALV_C_NODE_RELATION=>FIRST_CHILD
DATA_ROW = w_documentacion
TEXT = v_texto
FOLDER = abap_false
).

ENDLOOP.
ENDLOOP.

"Ajusta el tamaño de las columnas a su contenido
gr_tree->GET_COLUMNS( )->SET_OPTIMIZE( abap_true ).
gr_tree->get_columns( )->GET_COLUMN( 'Mandt' )->SET_VISIBLE( abap_false ). "Ocultamos columna mandante
gr_tree->get_columns( )->GET_COLUMN( 'idcurso' )->SET_VISIBLE( abap_false ). "Ocultamos columna idcurso
gr_tree->get_columns( )->GET_COLUMN( 'grupo' )->SET_VISIBLE( abap_false ). "Ocultamos columna grupo
gr_tree->get_columns( )->GET_COLUMN( 'idnodo' )->SET_VISIBLE( abap_false ). "Ocultamos columna idnodo
gr_tree->get_columns( )->GET_COLUMN( 'nodo1' )->SET_VISIBLE( abap_false ). "Ocultamos columna nodo1
gr_tree->get_columns( )->GET_COLUMN( 'ruta' )->SET_VISIBLE( abap_false ). "Ocultamos columna ruta

"Ponemos texto en las cabeceras de la columna
gr_tree->get_columns( )->GET_COLUMN( 'Nombre' )->SET_LONG_TEXT( 'Nombre' ).

gr_tree->GET_TREE_SETTINGS( )->SET_HIERARCHY_HEADER( 'Género' ). "Ponemos titulo en la columna del árbol
gr_nodos->EXPAND_ALL( ). "Expande todos los nodos

"Mostramos la ALV
gr_tree->DISPLAY( ).
ENDMODULE. " STATUS_0220 OUTPUT

---------------------------------------------------------------------------------------
:confused: ¿Habría que pintar la ALV en el Painter o simplemente con esto ya estaria pintado? Nunca me ha dejado claro eso :confused:


Lo que quieres hacer es mostrar tu alv en un contenedor?