
Mejoras a ABAP
Juanto con SAP Netweaver 7.40 llego el servidor de aplicaciones AS ABAP 7.40.
El AS ABAP 7.40 es el sucesor de AS ABAP 7.31 (tambien conocido como AS ABAP 7.03) que es el sucesor de AS ABAP 7.02 que se basa en AS ABAP 7.0.
Gracias a una mayor orientacion hacia las expresiones, estas mejoras nos permiten escribir un codigo ABAP mas corto y mas legible.
En el contexio del desarrollo de ABAP en SAP HANA, las opciones asociadas con las expresiones hacen posible reducir el codigo ABAP a la intencion escencial.
El Paradigma code pushdown puede utilizarse para realizar calculos dentro de la BD y (al usar los componentes contenidos en el ABAP AS) la aplicacion puede orquestarse utilizando considerablemente menos codigo de aplicacion.
Para determinar si estamos trabajando con ABAP 7.4 o superior se debe ingresar a un modo SAP e ir al menú Sistema --> Status --> Componentes (Product Version) y en la lista de componentes de software instalados, se busca la version o release de los componentes SAP_BASIS y SAP_ABA para verificar la version de SAP Netweaver.
A partir de la version 7.9 ABAP fue orientado a declaraciones y con la version 7.02, ABAP dio el primer gran paso en la direccion de habilitacion de la expresion. Muchas nuevas funciones incorporadas, expresiones de cadena con operador de concatenacion && combinadas con cadenas y la capacidad de escribir expresiones en muchas posiciones de operandos, abrieron un nuevo ámbito de programacion ABAP.
Gracias a los corchetes en ABAP se podra usar menos declaraciones y menos auxiliaes en una variable.
Con la version 7.40 vamos en la direccion de la orientacion de la expresion real: mas expresiones y mas posiciones de expresion.
No es necesario el uso de la instruccion READ TABLE gracias a los corchetes dentro de corchetes.
ABAP en constante evolucion hasta que en Octubre del año 2015, SAP lanza el servidor de aplicaciones SAP NetWeaver AS ABAP 7.5 y con él la nueva version del lenguaje ABAP 7.5
Con el cual presenta las siguientes generalidades:
- Es compatible con el servidor de Aplicaciones ABAP 7.4
- Corre con el Kernel 7.45
- Solo funciona con sistema Unicode, es decir al momento de comprobar la sintaxis se verificara que el atributo Unicode este tildado.
- Soporta la BD SAP HANA y otras BD.
- Facilita la explotacion de HANA con nuevas optimizaciones sofisticadas centradas en la BD.
- Ofrece un modelo de programacion ABAP comun para aplicaciones transaccionales y analíticas.
- Establece a SAP Fiori como experiencia de usuario de aplicaciones cruzadas.
- Es Compatible con la industria 4.0 y los escenearios de big data.
- Moderniza y simplifica aun mas el lenguaje ABAP.
- Ofrece una experiencia de desarrollo de primera clase en Eclipse
- Proporciona herramientas de administracion de codigo personalizadas para una actualizacion y migracion simples a SAP S/4HANA.
Declaraciones en Linea
El primer paso al crear un programa ABAP es escribir las declaraciones de datos. Declaramos las variables al inicio de las subrutinas, los metodos y los programas.
La gran mayoria de las lineas de codigo que escribimos son solo para estas declaraciones de tipo de datos.
A partir de la version ABAP 7.4 éstas declaraciones de datos pueden evitarse por completo.
El objetivo de las declaraciones en linea (Inline Declarations) es ayudar a reducir y optimizar el codigo que se genera.
Si bien en algunos casos son realmente muy practicas y recomendables de utilizar, en otros casos traen como consecuencia que el codigo ABAP se vuelve muy complejo de seguir.
Declaraciones con DATA
Antes de ABAP 7.4 declarabamos y asignabamos una variable en dos lineas y ahora con la version 7.4 ya es posible realizar ambos pasos en una sola linea.
Lopp AT INTO work area
Antes de ABAP 7.4 se debá declarar una estructura o tambien llamada work area para recorrer una tabla en un LOOP en 2 lineas y ahora con la version 7.4 ya es posible realizar ambos pasos en una sola linea.
CALL METHOD
Antes primero se declaraba los atributos que se utiliza luego en la llamada de un metodo en 2 lineas y ahora con la version 7.4 ya es posible realizar ambos pasos en una sola linea.
LOOP AT ASSIGNING
Antes primero se declaraba un FIELD SYMBOLD que luego asinamos al momento de realizar un LOOP a una tabla interna, de modo de almacenar cada registro de la tabla y ahora con la version 7.4 ya es posible realizar ambos pasos en una sola linea.
READ TABLE ASSIGNING
Antes primero se declaraba un FIELD SYMBOL que luego se asigna al momento de leer un registro de una tabla interna, de modo de almacenar el registro de la tabla y ahora con la version 7.4 ya es posible realizar ambos pasos en una sola linea.
SELECT INTO TABLE
Antes primero se declaraba una tabla interna y luego se utilizaba dicha tabla para almacenar el resultado de un SELECT y ahora con la version 7.4 ya es posible realizar ambos pasos en una sola linea.
SELECT SINGLE INTO
Antes al momento de realizar un SELECT SINGLE INTO, primero se declaraba las variables en donde se van a almacenar los resultados obtenidos en la seleccion y luego realizabamos la seleccion en 2 pasos y ahora con la version 7.4 ya es posible realizar ambos pasos en una sola linea.
Las declaraciones en linea no cambian el alcance de las variables ABAP por lo tanto no es posible usar el mismo nombre de variable varias veces dentro de un metodo. es recomendable continuar definiendo al comienzo de la implementacion de un metodo las variables que deseamos utilizar en varias lugares dentro de un metodo extenso. las declaraciones en lineas son solamente utiles para las variables con un contexto de uso limitado y local. las declaraciones no pueden usarse en todas las situaciones.
Expresiones con tablas.
Son muchos los cambios en lo que refiere al manejo de tablas internas. Uno de los mas significativos hace referencia a que cuando una linea de la tabla no es encontrada al momento de realizar por ejemplo un READ, entonces se dispara la excepcion CX_SY_ITAB_LINE_NOT_FOUND en lugar de cambiar de valir la variable del sistema SY-SUBRC tal como veniamos trabajando hasta ahora.
READ TABLE INDEX
ANtes para leer un registro puntual de una tabla interna usabamos al como "READ TABLE XXX INTO XXX INDEX 1. Ahora con la version 7.4 se puede ejecutar la linea de codigo para realizar lo mismo "data(XXX) = XXX [ 1 ]
READ TABLE WITH KEY
Antes para leer un registro de tabla interna utilizando campos claves era "READ TABLE ti_carrier WITH KEY carrid= 'LH' INTO wa_carrier ahora podria ejecutarse en una sola linea DATA(vl_nombre) = ti_carrier[carrid='LH']-carname
¿Existe el registro?
Ahora para determinar si existe el registro de una tabla interna podria ejecutar IF line_exists( ti_carrier[ carrid = 'AA']). ENDIF.
Para Obtener el indece de una tabla interna podria ejecutar DATA(v_index) = line_index (t1_scar [carrid = 'AA'])
Se producira un error en tiempo de ejecucion "dump" si utilizamos una expresion en linea que haga referencia a un registro que no existe en una tabla interna. Es por ello que SAP recomienda asignar un FIELD SYMBOL y chequear el SY-SUBRC.
Expresiones de Constructor: permiten crear e iniciar objetos ABAP, estructuras de datos y referencias de datos por medio de una expresion. El benefiio de estas expresiones radica en la reduccion de las declaraciones necesarias, asi como en la compatibilidad con las declaraciones en linea.
Los parametros para el constructor son transferidos cuando el metodo es llamado. Ademas de los objetos, tambien podemos utilizar expresiones para inicializar estructuras o tablas internas. ahora mediante el operador VALUE, se utiliza la expresion de contructor ejecutando la siguiente linea ls_carr = VALUE # ( carrid = 'LH' carrname = 'LEHA').
Uno de los beneficios de la expresion VALUE es que puede combinarse con una declaracion en linea. Sin embargo en algunos casos se debe especificar el tipo de datos exacto.
Tambien es posible usar el operador VALUE para inicializar tablas internas.
Otro operador muy utilizado es el operador REF, que es una alternativa orientada a la expresion, el cual sera utilizado para generar una referencia de datos junto con la sentencia GET REFERENCE.
Asi como los operadores NEW, VALUE y REF existen muchos mas operadores tales como CONV o conversaciones de tipo CAST
Cuando se utiliza expresiones de constructor, no se debe pasar por alto las consideraciones de tiempo de ejecucion y la elegancia del codigo, si necesitamos que un objeto este presente en varios lugares, por ejemplo, no se debe inicializarlo dos veces.
Operador CORRESPONDING: muy utilizado cuando se trabaja con estructuras y tablas internas, ha sido optimizado de modo de poder utilizarse en una sola linea. cuando los campos que no sean iguales o no coincidan entre ambas estructuras seran inicializados.
Operaciones con caracteres: Antes las cadenas de caracteres debian ser indentificadas encerrandolas entre comillas simpleas ahora debera estar rodeada por dos caracteres |XXX|
Dentro de una cadena de caracteres podemos encerrar entre llaves {} los siguientes objetos y expresiones de modo que no sean considerados como caracteres:
- objeto de datos
- expresiones de cálculo
- Expresiones de constructores
- Expresiones de tablas
- funciones predefinidas
- Metodos funcionales y encadenamiento de métodos.
La sentencia ABAP CONCATENATE cuando se trabaja com cadena de caracteres tambien ha sida optimizada usando "&" ejemplo |HOLA| & | | & |MUNDO|.