Lea en SAP Netweaver . . .

Desanudando Conceptos: SAP HANA

No hay “newsletter”, conferencia o evento del ambiente ERP que en los últimos meses haya ahorrado detalles y especulaciones sobre el nuevo paradigma: SAP HANA.

En medio del marketing “hype”, es siempre difícil para los que estamos en el ruedo decodificar lo esencial de las nuevas tecnologías, así que aquí va nuestro aporte para ayudar a una cabal y conceptual comprensión de SAP HANA.

FaceBookTwitterGoogle+

SAP Netweaver / ABAP                  Notas técnicas / Tips / Tutorials

Creación de variables en tiempo de ejecución

Conozca cómo 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”

 

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

 

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

Xstring

Byte-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:

FORM f_create_data USING pv_name TYPE char10

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.


b) Definición de un tipo de datos existente en el diccionario o en el reporte

 

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]

[KEY <f1>...<fn>|DEFAULT KEY|KEY TABLE_LINE]

[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.

CREATE DATA lt_table_4

TYPE REF TO (pv_name).

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.

ASSIGN lt_table->* TO <fs_table>.

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.
  • La variable anónima puede ser reutilizada para instanciar distintos tipos de datos en la misma sesión de un programa.

Copyright Teknoda S.A.

IMPORTANTE:
“Notas técnicas de SAP ABAP" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes SAP. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos.
Si desea suscribir otra dirección de e-mail para que comience a recibir las Notas Técnicas SAP, envíe un mensaje desde esa direcciónsapping@teknoda.com, aclarando nombre, empresa, cargo y país del suscriptor.

SAP, SAP Netweaver, R/3 y ABAP son marcas registradas de SAP AG. SAP no es el editor de esta publicación y no es responsable de la misma en ningún aspecto. La información contenida en esta publicación ha sido generada por nuestros especialistas a partir de fuentes consideradas confiables y del ejercicio profesional cotidiano. No obstante, por la posibilidad de error humano, mecánico, cambio de versión u otro, Teknoda no garantiza la exactitud o completud de la misma.
COPYRIGHT TEKNODA S.A. PROHIBIDA SU REPRODUCCION TOTAL O PARCIAL SIN CONSENTIMIENTO DE TEKNODA


 

FICHA TECNICA: Notas técnicas – Tips de SAP Netweaver ABAP ”Creación de variables en tiempo de ejecución”

Tema: Programación ABAP., Descripción: El objetivo de este tip es describir cuándo y cómo se generan las variables dinámicamente en tiempo de ejecución, a diferencia de las que se crean en tiempo de desarrollo.

Escribir un comentario


Código de seguridad
Refescar

Copyright © 2017 Teknoda tips - Tecnologia SAP Netweaver - IBM AS400 - System i - iSeries. Todos los derechos reservados.