Problema con el ALV TREE

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Oboros
    Junior Member
    • nov
    • 2

    #1

    Problema con el ALV TREE

    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

    ---------------------------------------------------------------------------------------
    ¿Habría que pintar la ALV en el Painter o simplemente con esto ya estaria pintado? Nunca me ha dejado claro eso
  • lfarro
    Junior Member
    • sep
    • 4

    #2
    Originalmente publicado por Oboros
    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

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

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

    Comentario

    Trabajando...