Crear tipo dinámico

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • braisco
    Junior Member
    • sep
    • 3

    #1

    Crear tipo dinámico

    ¿Es posible crear un tipo (TYPES dinámico?

    Necesito crear un tipo dinámico para declarar una tabla interna de ese tipo. Esa tabla interna será para un ALV que tiene que mostrar una serie de campos fijos + una serie de campos dinámicos. Por lo que necesito es hacer un tipo con campos fijos y campos que vengan de un <fs> o algo por el estilo... pero no se como...

    Un saludo!!
  • Mauricio Hidalgo
    Senior Member
    • may
    • 481

    #2
    Tomado desde la ayuda en línea para CREATE DATA.

    PARAMETERS: type(10) TYPE c,
    length TYPE i,
    decimals TYPE i.

    DATA dref TYPE REF TO data.

    FIELD-SYMBOLS <fs> TYPE ANY.

    START-OF-SELECTION.
    TRY.
    PERFORM create_data USING type
    length
    decimals
    CHANGING dref.
    ASSIGN dref->* TO <fs>.
    DESCRIBE FIELD <fs> TYPE type
    LENGTH length IN BYTE MODE
    DECIMALS decimals.
    WRITE: type, length, decimals.
    CATCH cx_sy_create_data_error.
    WRITE: 'Error creating', type, length, decimals.
    ENDTRY.

    FORM create_data USING value(typ) TYPE c
    value(len) TYPE i
    value(dec) TYPE i
    CHANGING dref TYPE REF TO data
    RAISING cx_sy_create_data_error.
    TRANSLATE typ TO LOWER CASE.
    CASE typ.
    WHEN 'd' OR 'f' OR 'i' OR 'string' OR 't' OR 'xstring'.
    CREATE DATA dref TYPE (typ).
    WHEN 'c' OR 'n' OR 'x'.
    CREATE DATA dref TYPE (typ) LENGTH len.
    WHEN 'p'.
    CREATE DATA dref TYPE p LENGTH len DECIMALS dec.
    WHEN OTHERS.
    RAISE EXCEPTION TYPE cx_sy_create_data_error.
    ENDCASE.
    ENDFORM.

    Comentario

    • joau_fedipe
      Member
      • oct
      • 79

      #3
      Hola Braisco,
      Si vas a mostrar campos dinámicos en un ALV no tienes que definir ningún tipo. Lo único que debes hacer antes de mostrar el ALV es lo siguiente:
      Al definir el layout para los fieldcat aquellos campos que son dinamicos tendrás que decidir si se muestran o no. Si no se van a mostrar no lo defines en el layout pero si se van a mostrar si lo tienes que definir en el layout.

      Una condición para mostrar estos campos dinamicos puede ser: si en la tabla interna este campo tiene información lo muestro pero si no tiene información no lo muestro.

      Espero que lo explicado te ayude.
      Saludos.

      Comentario

      • braisco
        Junior Member
        • sep
        • 3

        #4
        Gracias a los dos por contestar!

        El problema no es el catálogo de campos, el problema lo tengo a la hora de declarar la tabla que contiene los datos a mostrar.

        No se como declarar una parte fija y una parte dinámica.

        Algo como:

        Código:
          TYPES: BEGIN OF t_datos.
            INCLUDE STRUCTURE mara.
            INCLUDE STRUCTURE <dinamicos>.
           TYPES END OF t_datos.

        Esto por supuesto no funciona...

        Comentario

        Trabajando...