ALV OO dinámico

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Neo_25
    Member
    • jun
    • 51

    #1

    ALV OO dinámico

    Buenas,
    alguien me podría decir como se haría a grandes rasgos un ALV Orientado a Objetos Dinámico, es decir, q no se sabe cuantas columnas mostrará de manera fija.

    Yo he hecho ALV OO, pero no dinámica.

    Si alguien me podría decir algo. Por favor.

    Lo ideal sería algo de código, por eso si me indican algún enlace con ello, perfecto.

    Gracias
  • Neo_25
    Member
    • jun
    • 51

    #2
    Lo he resuelto de esta manera.
    Es un código de la página:


    Código:
    *ALV OO dinámico
    * Declaración de TYPE POOLS para el ALV
    TYPE-POOLS: slis.                    " ALV Global Types
    * Declaración de VARIABLES para la tabla interna dinámica y el ALV
    DATA: l_structure            TYPE REF TO DATA,
          l_table                TYPE REF TO DATA,
          struc_desc             TYPE REF TO cl_abap_structdescr,
          lt_layout              TYPE slis_layout_alv,
          ls_lvc_fieldcatalogue  TYPE lvc_s_fcat,
          lt_lvc_fieldcatalogue  TYPE lvc_t_fcat,
          ls_fieldcatalogue      TYPE slis_fieldcat_alv,
          lt_fieldcatalogue      TYPE slis_t_fieldcat_alv.
    * Declaración de FIELD-SYMBOLS
    FIELD-SYMBOLS : <it_table> TYPE STANDARD TABLE,
    <dyn_str>  TYPE ANY,
    <str_comp> TYPE abap_compdescr.
    * Textos para el TÍTULO del grid
    DATA : t1(30),  "texto escrito por nosotros
           t2(10),  "recibirá el nombre de la tabla
           t3(50).  "texto final a mostrar
    * Declaración de SELECTION SCREEN para la tabla de entrada
    PARAMETERS : p_table TYPE TABNAME."LIKE dd02l-tabname. "Nombre de la tabla
    * initialization event
    INITIALIZATION.
    * start of selection event
    START-OF-SELECTION.
    * Textos para los TÍTULOS DEL GRID
    t1 = 'ALV OO dinámico de la tabla: '. "texto introducido por nosotros
    t2 = p_table.                         "nombre de la tabla seleccionada
    * Texto final a mostrar en la pantalla
    CONCATENATE t1 t2 INTO t3 SEPARATED BY space.
    * C R E A R   U N A   E S T R U C T U R A   D I N Á M I C A
    CREATE DATA l_structure TYPE (p_table).
    ASSIGN l_structure->* TO <dyn_str>.
    * C A M P O S   D E   L A   E S T R U C T U R A
    struc_desc ?= cl_abap_typedescr=>describe_by_data( <dyn_str> ).
    LOOP AT struc_desc->components ASSIGNING <str_comp>.
    *   construimos el Fieldcatalog
      ls_lvc_fieldcatalogue-fieldname = <str_comp>-name.
      ls_lvc_fieldcatalogue-ref_table = p_table.
      APPEND ls_lvc_fieldcatalogue TO lt_lvc_fieldcatalogue.
    *   construimos el Fieldcatalog
      ls_fieldcatalogue-fieldname   = <str_comp>-name.
      ls_fieldcatalogue-ref_tabname = p_table.
      APPEND ls_fieldcatalogue TO lt_fieldcatalogue.
    ENDLOOP.
    
    * C R E A R   L A   T A B L A   I N T E R N A   D I N Á M I C A
    CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = lt_lvc_fieldcatalogue
    IMPORTING
      ep_table        = l_table.
    ASSIGN l_table->* TO <it_table>.
    * recuperar los datos de la tabla seleccionada
    SELECT * FROM (p_table)
    INTO CORRESPONDING FIELDS OF TABLE <it_table>.
    * LAYOUT del ALV
    lt_layout-zebra = 'X'.
    lt_layout-colwidth_optimize = 'X'.
    lt_layout-window_titlebar = t3.
    * MOSTRAR el ALV
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      is_layout     = lt_layout
      it_fieldcat   = lt_fieldcatalogue
    TABLES
      t_outtab      = <it_table>
    EXCEPTIONS
      program_error = 1
      OTHERS        = 2.
    IF sy-subrc  0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

    Comentario

    Trabajando...