• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
Twitter Linkedin Instagram
S4PCADEMY_Logo
Twitter Linkedin Instagram
SAP ABAP

Literales en ABAP | Blogs de SAP

By s4pcademy 


ABAP clásico ofrece literales sin tipo, que se interpretan como literales de caracteres o como literales numéricos. Los nuevos niños en el bloque son literales escritos. Están disponibles en casi todos los tipos de datos, pero solo se admiten como operandos en ABAP SQL y ABAP CDS. Esta publicación de blog proporciona una descripción general de los literales en ABAP de un vistazo. Los literales son parte del ABC básico de ABAP y los desarrolladores de ABAP deben estar familiarizados con ellos.

Definición

A literal es anuncioEspecificación directa, similar a un carácter, de un valor en el código fuente ABAP de un programa ABAP o en un objeto CDS. Hay dos tipos de literales: literales con tipo y sin tipo. mecanografiado literales especificar su tipo de datos explícitamente, mientras que sin tipo los literales solo especifican un valor y el tipo de datos se deriva implícitamente.

Literales en ABAP clásico

El clásico lenguaje de programación ABAP ofrece solo literales sin tipo.

Tipo de literal Detalles
Literal numérico
  • Puede ser un tipo de datos entero excepto para int8.
  • Si el valor no está en el rango de valores de un tipo entero, el literal se interpreta como un número empaquetado de tipo de datos pag.
  • No se permite ningún separador decimal.
Caracter literal
  • Puede tener el tipo de datos C o el tipo de datos cadena.

Para todos los demás tipos de datos, ABAP Reglas de asignación y conversión se aplican, lo que puede conducir a resultados inesperados.

El operador literal & se puede utilizar para concatenar literales. Está disponible en ABAP y ABAP SQL, pero no en ABAP CDS.

Literales en ABAP SQL

Los literales sin tipo en ABAP SQL son los mismos que los literales ABAP y se aplican las mismas reglas.

A partir de la versión ABAP 7.80 (versión trimestral), 7.55 (local), ABAP SQL también admite literales escritos:

Tipo de literal Sintaxis
literal entero
  • INT1`…`
  • INT2`…`
  • INT4`…`
  • INT8`…`
Literal de número empaquetado
Literal de coma flotante decimal
  • DECFLOAT16`…`
  • D16N`…`
  • DF16_RAW`…`
  • D16R`…`
  • DECFLOAT34`…`
  • D34N`…`
  • DF34_RAW`…`
  • D34R`…`
  • DF16_DEC`…`
  • D16D`…`
  • DF34_DEC`…`
  • D34D`…`
Literal de punto flotante binario
Literal de campo de texto
Literal de cadena de texto
Literal de campo de bytes
Literal de cadena de bytes
Literal de texto numérico
Literal del cliente
Literal de clave de idioma
Literal de fecha
Tiempo literal
Literal de marca de tiempo
Literal de campo de moneda
Literal de clave de moneda
Literal de campo de cantidad
Literal de clave de unidad

Ejemplo:

El siguiente ejemplo usa literales escritos de tipos MUY LARGO, DATNy INT8 en diferentes posiciones de operandos.

SELECT SINGLE 
       FROM demo_expressions 
       FIELDS 
         utcl_add_seconds( utclong`2020-04-01T12:01:01,2`,50 ) AS utcl, 
         datn_add_months( datn`17890101`,15 ) AS add_months, 
         int8`9999999999999999` AS int8
INTO @DATA(result).

Sin literales escritos, habría los siguientes problemas:

  • Los literales sin tipo solo están disponibles como literales de caracteres de tipo c o cadena, o como literales numéricos de tipo i o p. Los tipos de datos UTCLONG y DATN no están disponibles como literales sin tipo. La expresión de conversión ABAP SQL tampoco es posible en el ejemplo que se muestra, porque UTCLONG y DATN no son tipos de destino válidos.
  • No hay literales numéricos sin tipo de tipo INT8. Sin un literal escrito, 9999999999999999 se interpretaría como un número empaquetado.

El valor de los literales escritos se comprueba en tiempo de compilación. Un valor que no está dentro del rango de valores del tipo de datos especificado da como resultado un error de verificación de sintaxis.

Ejemplo:

El siguiente literal escrito especifica un valor que no es válido para el tipo de datos UTCLONG. Se produce un error de comprobación de sintaxis en tiempo de compilación.

...
utcl_add_seconds( utclong`2020-13-01T12:01:01,2`,50 ) AS utcl
...

Aparece el siguiente mensaje de error:

Por el contrario, los literales sin tipo en ABAP clásico se comprueban en tiempo de ejecución y los valores incorrectos provocan errores de tiempo de ejecución. Por lo tanto, los literales escritos son más convenientes para los desarrolladores.

Literales en ABAP CDS

Al igual que ABAP clásico, las vistas clásicas basadas en DDIC de CDS ofrecen literales de caracteres numéricos y sin tipo sin tipo:

Tipo de literal Detalles
Caracter literal
  • Si la cadena consta de dígitos, se interpreta como un texto literal numérico de tipo de datos NUMC.
  • De lo contrario, se interpreta como tipo de datos. CARBONIZARSE.
Literal numérico
  • O un literal entero de tipo de datos INT1, INT2, INT4o INT8.
  • Si el literal tiene un punto decimal, se interpreta como un literal de punto flotante binario de tipo de datos FLTP.

A partir de la versión ABAP 7.83 (versión trimestral), 7.56 (local), los literales escritos también están disponibles en ABAP CDS. son compatibles en Entidades de vista de CDS y en Jerarquías de CDS.

Tipo de literal Sintaxis
literal entero
  • abap.int1’…’
  • abap.int2’…’
  • abap.int4’…’
  • abp.int8’…’
Literal de número empaquetado
Literal de coma flotante decimal
  • abap.decfloat16’…’
  • abap.d16n’…’
  • abap.decfloat34’…’
  • abap.d34n’…’
Literal de punto flotante binario
Literal de campo de texto
Literal de cadena de texto
  • abap.cadena’…’
  • abap.cadena’…’
Literal de campo de bytes
Literal de cadena de bytes
  • abap.rawstring’…’
  • abap.rstr’…’
Literal de texto numérico
  • abap.numc’…’
  • abap.clnt’…’
  • abap.lang’…’
Literal del cliente
Literal de clave de idioma
Literal de fecha
  • abap.datos…’
  • abap.datn’…’
Tiempo literal
  • abap.tims’…’
  • abap.timn’…’
Literal de marca de tiempo
  • abap.utclong’…’
  • abap.utcl’…’
Literal de campo de moneda
Literal de clave de moneda
Literal de campo de cantidad
Literal de clave de unidad

Ejemplo

El siguiente ejemplo usa literales escritos de tipos INT1, DIC, DECFLOAT34, y D16N en diferentes posiciones de operandos.

@EndUserText.label: 'CDS view entity, numeric typed literals' 

define view entity DEMO_CDS_NUMERIC_TYPED_LIT 
  as select from demo_ddic_types 
{ 
  key id, 
      abap.int1'1'  as int1, 
      abap.dec'.15' as dec_literal, 
      abap.decfloat34'123.456E789' * 100 as ArithmField 
} 
where 
  d16n = abap.d16n'123.45' 

Conclusión

Los literales escritos facilitan la vida de los desarrolladores y reducen la posibilidad de errores. Desafortunadamente, no están disponibles en el lenguaje de programación ABAP clásico, sino solo en ABAP SQL y ABAP CDS.

Toda esta información también se puede encontrar en la Documentación de palabras clave ABAP. Esta publicación de blog solo destaca el tema para aquellos que estén interesados.

Documento:




Anatomía de un módulo de función: POPUP_TO_CONFIRM - Parte 3
Previo
Lógica de cifrado para archivos de pago.
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.

x