Dinámicamente obtener la estructura de una tabla dinámica

Quiero dinámicamente obtener la estructura de una tabla dinámica. Obtención de la tabla no es ningún problema, pero me quedé con la obtención de la estructura de la tabla.

DATA: lo_dynamic_table TYPE REF TO data.
FIELD-SYMBOLS: <lt_table_structure> TYPE table,
                <ls_table_structure> TYPE any.

CREATE DATA lo_dynamic_table TYPE TABLE OF (lv_my_string_of_table).
ASSIGN lo_dynamic_table->* TO <lt_table_structure>.

//some code assigning the structure

Ahora quiero ejecutar este comando:

SELECT SINGLE * FROM (lv_my_string_of_table) INTO <ls_table_structure> WHERE (lv_dynamid_where_field).

Si hay alguna otra solución, voy a estar de acuerdo con eso.

  • Y ¿cuál es exactamente tu problema con eso?
  • no, yo no, porque quiero consultar una tabla y no una itab.
  • Y no funciona, porque <ls_table_structure> no está asignado.
  • Uy, estás totalmente en lo correcto.
InformationsquelleAutor Niklas | 2013-10-11

3 Kommentare

  1. 4

    Uso de RTTS.

    Tipo en tiempo de ejecución servicios

    Con este marco de trabajo Que son capaces de obtener el tipo deseado durante el tiempo de ejecución.

    http://wiki.scn.sap.com/wiki/pages/viewpage.action?pageId=42965

    La clase deseada debe ser CL_ABAP_TABLEDESCR o incluso CL_ABAP_DATADESCR.

    Que va a hacer el trabajo para Usted.

    Como parece, Usted está consiguiendo un ddic nombre de la tabla y desea seleccionar dinámicamente los datos de la tabla de nombre en un genérico tabla interna.

    Por lo tanto, si Usted está recibiendo ya un buen ddic nombre, entonces el uso de rtts es aún más simple.
    Porque Usted tiene la ddic nombre.

    Generalmente también hay muchos módulos de función ( sobre todo en el espacio de nombres con el prefijo «RPY_*» ).
    Allí Usted seguramente puede encontrar uno, que determina la estructura de una tabla, si contiene incluye, y así sucesivamente.
    Pero, trate de typedescriptor en primer lugar, me gustaría empezar con cl_abap_tabledescr=>get_table_line_type.

    • Gracias icbytes, pero me he encontrado con un pequeño y probablemente más fácil solución nativa.
    • Que es ?
    • He publicado y acceppted ella. Usted puede ver más abajo.
    • Ok, el uso de «COMO la LÍNEA DE». No es mala idea, de la vieja escuela, pero suficiente.
  2. 3

    Este código funcionó para mi caso:

    DATA:   table_name type string,
            lo_dynamic_table TYPE REF TO data,
            lo_dynamic_line TYPE REF TO data.
    
    FIELD-SYMBOLS:  <lt_table_structure> TYPE table,
                    <ls_table_structure> TYPE any.
    
    table_name = 'yourtablename'.
    
    CREATE DATA lo_dynamic_table TYPE TABLE OF (table_name).
    ASSIGN lo_dynamic_table->* TO <lt_table_structure>.
    
    CREATE DATA lo_dynamic_line LIKE LINE OF <lt_table_structure>.
    ASSIGN lo_dynamic_line->* TO <ls_table_structure>.
    
  3. 0

    He añadido el código para la dinámica de la tabla hash con la dinámica de claves.

    DATA TAB_NAME LIKE SY-TNAME VALUE 'SCARR'.
    DATA KEYTAB TYPE TABLE OF STRING.
    
    DATA DREF TYPE REF TO DATA.
    FIELD-SYMBOLS <F_TAB> TYPE ANY TABLE.
    
    APPEND 'CARRID' TO KEYTAB.
    
    CREATE DATA dref TYPE HASHED TABLE OF (TAB_NAME)
                     WITH UNIQUE KEY (KEYTAB).
    
    ASSIGN dref->* TO <F_TAB>.
    SELECT *
           FROM (TAB_NAME)
           INTO TABLE <F_TAB>.
    
    cl_demo_output=>display( <F_TAB> ).
    

    Considerar también los enlaces.

    https://help.sap.com/doc/saphelp_nw70/7.0.31/en-US/79/c55497b3dc11d5993800508b6b8b11/content.htm?no_cache=true

    https://archive.sap.com/discussions/thread/92739

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea