• No se han encontrado resultados

C012-CrearvariablesentiempodeejecuciónenprogramasABAP.docx

N/A
N/A
Protected

Academic year: 2020

Share "C012-CrearvariablesentiempodeejecuciónenprogramasABAP.docx"

Copied!
7
0
0

Texto completo

(1)

Crear variables en tiempo de ejecución en

programas ABAP

A diferencia de las variables declaradas en tiempo de desarrollo, la generación dinámica de variables se realiza cuando el programa se encuentra en tiempo de ejecución. Esto es útil cuando no se conoce el tipo de dato que se requiere para dicha variable hasta el momento de necesitarla.

La creación de variables en tiempo de ejecución consta principalmente de tres partes: la primera es la creación de la “variable anónima” utilizando tipos de referencia; la segunda es la asociación de la “variable anónima” con el tipo de dato que se requiere y la tercera es la lectura y escritura en dicha variable.

En el presente tip definimos el procedimiento para crear esas variables y su manejo posterior.

I. Creación de la “variable anónima”

DATA: v_data_ref TYPE REF TO data.

Dicha variable se declara de la misma forma como se declararía un objeto, pero con la diferencia que se le asocia un tipo de dato estándar genérico (DATA). A menos que se le indique un valor inicial, estará vacía.

Ejemplo:

DATA: v_data_ref TYPE REF TO data.

II. Creación del tipo de dato de la “variable anónima”

(2)

Mediante la sentencia CREATE DATA se declara el tipo de dato en la sesión interna del programa. El adicional TYPE soporta la referencia de utilización del nombre de una variable.

a) Definición de un tipo de dato ABAP

CREATE DATA v_data_ref TYPE {tipo_abap│(nombre)} [LENGTH longitud] DECIMALS [decimales].

Los tipos de datos posibles a declarar dinámicamente son:

Tipo

Descripcion

C Text field D Date field

F Floating point number I 4-byte integer

N Numeric text P Packed number String Text string

T Time field X Byte field XstringByte-string

Para los tipos de datos C, N, P y X se puede definir la longitud mediante el adicional LENGTH. Si no se define, se tomará el valor inicial por defecto. Para todos los demás tipos de datos no se puede utilizar este adicional.

Para el tipo de dato P, se pueden definir los decimales mediante el adicional DECIMALS. Si no se define, se tomará el valor inicial por defecto. Para todos los demás tipos de datos no se puede utilizar este adicional.

Ejemplo:

(3)

pv_len TYPE i pv_dec TYPE i.

DATA: l_dref TYPE REF TO data. TRY.

CASE pv_name.

WHEN 'D' OR 'F' OR 'I' OR 'STRING' OR 'T' OR 'XSTRING'.

CREATE DATA l_dref TYPE (pv_name). WHEN 'C' OR 'N' OR 'X'.

CREATE DATA l_dref TYPE (pv_name) LENGTH pv_len.

WHEN 'P'.

CREATE DATA l_dref TYPE p LENGTH pv_len

DECIMALS pv_dec. ENDCASE.

CATCH cx_sy_create_data_error.

WRITE 'Error en la creación de la variable'. ENDTRY.

ENDFORM.

(4)

CREATE DATA v_data_ref { {TYPE [LINE OF] {tipo│(nombre)} }│LIKE [LINE OF] dobj } }.

Se pueden crear tipos de elementos del diccionario o de tipos declarados en el programa. Ejemplo:

FORM f_create_data USING pv_name TYPE TABNAME16. DATA: lt_dref TYPE REF TO data,

lw_dref TYPE REF TO data. TRY.

CREATE DATA lt_dref TYPE (pv_name).

CREATE DATA lw_dref TYPE LINE OF (pv_name). CATCH cx_sy_create_data_error.

WRITE 'Error en la creación de la variable'. ENDTRY.

ENDFORM.

c) Definición de una tabla interna.

CREATE DATA it_data_ref TYPE [STANDARD|SORTED|HASHED] TABLE OF <linetype> WITH [UNIQUE|NON-UNIQUE]

(5)

[INITIAL SIZE n] [WITH HEADER LINE].

Los adicionales tienen el mismo significado y utilización como si se declarara la tabla con la sentencia DATA. La única diferencia es que se podría utilizar el adicional TYPE REF TO para crearla con referencia a otra “variable anónima”.

Ejemplo:

FORM f_create_data USING pv_name TYPE TABNAME16. DATA: lt_table_1 TYPE REF TO data

lt_table_2 TYPE REF TO data

lt_table_3 TYPE REF TO data lt_table_4 TYPE REF TO data. TRY.

CREATE DATA lt_table_1

TYPE STANDARD TABLE OF (pv_name). CREATE DATA lt_table_2

TYPE SORTED TABLE OF (pv_name) WITH NON-UNIQUE DEFAULT KEY.

CREATE DATA lt_table_3

TYPE HASHED TABLE OF (pv_name) WITH UNIQUE KEY TABLE_LINE.

(6)

CATCH cx_sy_create_data_error.

WRITE 'Error en la creacion de variable'. ENDTRY.

ENDFORM.

III. Acceso de lectura y escritura.

Para poder realizar los accesos a la variable de forma transparente es necesario asignar el contenido de la variable de referencia a un FIELD-SYMBOL.

Ejemplo:

FORM f_read_table USING pv_table_name TYPE TABNAME16. DATA: lt_table TYPE REF TO data,

lw_table TYPE REF TO data.

FIELD-SYMBOLS: <fs_field> TYPE ANY, <fs_table> TYPE TABLE,

<fs_wa> TYPE ANY. TRY

CREATE DATA lt_table TYPE (pv_table_name).

CREATE DATA lw_table TYPE LINE OF (pv_table_name). CATCH cx_sy_create_data_error.

WRITE 'Error en la creacion de variable'. ENDTRY.

(7)

ASSIGN lw_table->* TO <fs_wa>.

SELECT * FROM sflight

INTO TABLE <fs_table>.

LOOP AT <fs_table> INTO <fs_wa>. DO.

ASSIGN COMPONENT SY-INDEX OF STRUCTURE <fs_wa> TO <fs_field>. IF SY-SUBRC IS NOT INITIAL.

EXIT.

ENDIF.

WRITE / <fs_field>. ENDDO.

ENDLOOP.

ENDFORM.

IV. Para tener en cuenta

Excepciones en la generación de DATA OBJECT.: La clase encargada de tratar las excepciones al momento de asociar la “variable anónima” con un tipo de datos es: CX_SY_CREATE_DATA_ERROR.

Referencias

Documento similar

“WILL” CON VALOR CONDICIONAL: ORACIONES CONDICIONALES (PRIMER TIPO) (CONDITIONAL SENTENCES: FIRST TYPE)

We find works using synthetic data for object detection/recognition [62, 110, 111, 172], object viewpoint recognition [139], re-identification [14], and human pose estimation

Create graph widget and add data elements with element element operation.. Symbols are the

Tipo di luce disponibile - Lieferbare Leuchten Tipo de luz disponible - Modèle de lumiére disponible Type of light available.. Fornisce luce diretta verso

Petición de decisión prejudicial — Cour constitutionnelle (Bélgica) — Validez del artículo 5, apartado 2, de la Directiva 2004/113/CE del Consejo, de 13 de diciembre de 2004, por

Árbol completo es un árbol cuyos nodos corresponden a los nodos numerados (la numeración se realiza desde la raíz hacia las hojas y, en cada nivel, de izquierda a derecha) de 1 a

I El tipo Bool -&gt; Bool está formado por todas las funciones cuyo argumento y valor son booleanos.. I Ejemplo de tipo Bool -&gt; Bool Prelude&gt;

Credential Type and Number (License or Certification) Tipo de Credencial y Numero?. (Licencia