Con la aparición de las últimas versiones de ABAP se han ido introduciendo nuevas funcionalidades en el lenguaje. Sin embargo, quizás porque aún no las tenemos asimiladas a la hora de programar o por su desconocimiento, su uso no está muy extendido. En este artículo hablaremos sobre algunas de estas nuevas funcionalidades. Éstas mejoran la sintaxis en ABAP y agregan nuevas capacidades de lenguaje.

Son fáciles de usar y reducen la cantidad de líneas que necesitamos codificar para lograr la misma funcionalidad. Las nuevas funciones de lenguaje se han realizado basadas en anteriores versiones asegurando la compatibilidad entre estas.

En este artículo nos centraremos en algunas de estas nuevas funcionalidades que se han introducido en ABAP.

Declaración de variables:

A partir de la versión ABAP 7.4, se pierde la importancia de la declaración previa de variables. SAP reconoce el tipo de datos al que pertenece una variable y delegamos esta elección. De esta manera, ahorramos líneas de código, facilitamos su comprensión y evitamos posibles errores de sintaxis.

En este ejemplo podemos ver la declaración de una tabla interna y de una estructura:

En versiones anteriores a la 7.4, al llamar a una función o a un método con un tipo diferente al esperado, saltaba un “dump” u obteníamos errores. Al declarar la variable en línea, ésta adquiere el tipo del parámetro de la función o del método. De esta forma obtendremos un código más dinámico, ya que, en el caso de modificarse el tipo del parámetro, también lo hará nuestra variable.

De la misma forma, usaremos “New” para la creación de objetos. Gracias a este comando no tendremos la necesidad de usar el “CREATE OBJECT” así como la definición y la referencia tipificada de la variable.

Tablas internas

Éste es uno de los puntos donde encontramos más novedades.

A partir de la versión 7.4 tenemos la posibilidad de sustituir el “READ TABLE” por el “[ ]” (donde indicaremos el índex de la tabla) o por el “VALUE”.

Así podemos buscar una línea en concreto de una tabla interna y guardarlo en una “work area” ya sea buscando a partir de un índice de la tabla o bien a partir de los valores de los campos de la tabla que deseamos:

De igual manera podemos obtener el índice de la tabla cuyos campos tienen ciertos valores:

Modificar una entrada de una tabla sin la necesidad de un “Assigning Field Symbol”; podremos modificar el valor de un campo de una tabla interna a partir de una condición. En este caso modificamos el campo «Begda» de la tabla “i_tab” para aquel valor en el que “Endda” tenga el valor de la variable “lv_endda”.

Utilizar “VALUE” para la lectura de datos de una tabla interna:

En lugar la opción “Optional” se puede añadir un try/catch recogiendo la excepción CX_SY_ITAB_LINE_NOT_FOUND.

Del mismo modo, también podemos utilizar “VALUE” para modificar una tabla interna. Para ello añadiremos la opción de “BASE”, mediante la cual, si está especificada, el contenido de la tabla deseada se asigna al contenido de la tabla de destino y la nueva línea se añade a continuación.

En lugar de hacer un “READ TABLE” y un “IF sy-subrc EQ 0” para comprobar si la tabla contiene datos. De este modo lograremos simplificar nuestro código, así como ahorrarnos sentencias innecesarias.

Operaciones de datos

En este apartado veremos distintas operaciones relativas al procesamiento de datos:

  • ALPHA (IN/OUT): nos permite tanto quitar como añadir los ceros iniciales, sin necesidad de llamar a las funciones estándar CONVERSION_EXIT_ALPHA_OUTPUT/CONVERSION_EXIT_ALPHA_INTPUT.

Adquiriendo en primer lugar “lv_pernr = 1001001”, y posteriormente nuevamente “lv_pernr = 01001001” (ya que se trata de tipo “Numc” de ocho caracteres.

  • COND: Podremos elegir qué valor asignar a una variable según una condición. Sería equivalente a un “IF-ELSE”.
  • CONV: Esta instrucción nos permite aplicar a nuestra variable el tipo de destino. De esta forma nos evitamos problemas de incompatibilidades a la hora de llamar a funciones, o a la hora de pasar los parámetros a un método de una clase. En este ejemplo al parámetro “pernr” del tipo “P_PERNR” le estamos pasando una variable de tipo string, que sin el comando CONV no sería posible:
  • Concatenar variables: A partir de la versión 7.4 podremos concatenar variables sin importar el tipo que sea:

Donde la variable “lv_text_pernr” será del tipo String de longitud 35. Conviene prestar atención a los espacios en blanco entre los elementos concatenados.

Os contamos nuevas funcionalidades ABAP en la segunda parte de este artículo. No dudes en contactar con el equipo de HXM para aclarar cualquier duda.