✒️ABAP HANA - Las mejoras a partir de ABAP 7.40

ABAP HANA Las mejoras a partir de ABAP 7.40

Mejoras a partir de ABAP 7.4

1- Mejoras ABAP

Junto con SAP NetWeaver 7.40 llega el servidor AS ABAP 7.40 (aplication server)

El AS ABAP 7.40 es el sucesor de el AS ABAP 7.31 (también conocido como AS ABAP 7.03)

A partir del lanzamiento de SAP NetWeaver 7.40 se implementan una serie de mejoras que nos permiten escribir un código ABAP más corto y legible. Las opciones asociadas con las expresiones hacen posible reducir el código ABAP a la intención esencial.

El paradigma code pushdown se puede usar para hacer cálculos en la BD y si usamos los componentes del AS ABAP podemos hacer una aplicación con menos líneas de código.

1.1- ¿Como determinamos cual versión de ABAP estamos trabajando?

Para saber cual versión de ABAP usamos debemos abrir un modo en SAP y a continuación:

-> Seleccionamos la opción "System" del menú.

--> Seleccionamos "Status"

---> Damos clic en el botón "Product Version"

Nos mostrara una lista de la cual buscaremos los siguientes componentes para ver su versión o release:

- SAP_BASIS

- SAP_ABA

1.2- De donde venimos, donde estamos y para donde vamos?

A partir de la versión ABAP 7.0 fue orientado a declaraciones.

Así se vería una cadena de caracteres concatenada con ABAP 7.0.

- DATA wa_ejemplo LIKE LINE OF ti_ejemplo.

- READ TABLE ti_ejemplo WITH KEY ejemplo = 'Letritas' INTO DATA(wa_ejemplo).

- DATA: v_ejemplo TYPE string.

- CONCATENATE 'Texto' wa_ejemplo INTO v_ejemplo SEPARED BY space.

El primer paso para habilitar la expresión se dio en ABAP 7.2, el cual contenía muchas funciones nuevas, operaciones con el operador de concatenación "&&" combinado con cadenas y la capacidad de escribir expresiones en muchas posiciones de operandos.

En ABAP 7.02 el ejemplo anterior se vería así:

- DATA wa_ejemplo LIKE LINE OF ti_ejemplo.

- READ TABLE ti_ejemplo WITH KEY ejemplo = 'Letritas' INTO DATA(wa_ejemplo).

- cl_ejemplo=>display( |Carrier: {wa_ejemplo-campo }| ).

Con la version 7.4 de ABAP vamos en camino a la orientación de la expresión real.

Gracias a las llamadas declaraciones en línea el ejemplo anterior se veria de la siguiente manera:

- READ TABLE ti_ejemplo WITH KEY ejemplo = 'Letritas' INTO DATA(wa_ejemplo).

- cl_ejemplo=>display( |Carrier: {wa_ejemplo-campo }| ).

El compilador reconoce el tipo de datos que se requiere para la estructura wa_ejemplo, por lo que se puede declarar la estructura en línea de una sola posición.

Aún se puede reducir un poco más gracias al uso de corchetes dentro de llaves (Ojo en texto dice corchetes dentro de corchetes, pero en el ejemplo vemos corchetes dentro de llaves )

- cl_demo_output=>display( |Carrier: { ti_scarr[ carrid = 'LH' ]-carrname }| ).

De esta manera evitamos un READ TABLE.

1.3- Qué es ABAP 7.50 y cuales son sus fundamentos?

En octubre del 2015 SAP lanza una nueva versión del servidor AS SAP NetWeaver 7.5 y con ello la nueva versión de ABAP 7.5

Algunas generalidades de ABAP 7.5 son:

- Es compatible con el servidor AS ABAP 7.4

- Corre con el kernel 7.45

- Solo funciona con sistemas unicode, es decir comprueba que el atributo unicode este seleccionado al momento de comprobar la sintaxis.

- Soporta BD SAO HANA y otras.

- Facilita la explotación de HANA con nuevas optimizaciones centradas en BD.

- Ofrece un modelo de programación común para Aplicaciones transaccionales y analíticas.

- Establece SAP Fiori como experiencia de usuario de aplicaciones cruzadas.

- Compatible con la industria 4.0 y los escenarios de Big Data.

- Moderniza y simplifica aún más el lenguaje ABAP.

- Ofrece una experiencia de desarrollo de primera clase en eclipse.

- Proporciona herramientas de administración de código personalizadas para una actualización y migración simples a SAP S/4HANA.

2- Declaraciones en línea (inline declarations)

Con ABAP 7.4 ya podemos evitar las declaraciones de datos que anteriormente hacíamos al inicio de cada uno de nuestros programas.

Esto no quiere decir que ya no son necesarias las declaraciones de datos, pues al hacerlo usando "InLine Declarations" solo nos ayuda a reducir y optimizar el código. Pero esto solo puede aplicar en algunos casos ya que puede agregar complejidad al Código.

2.1- Declaraciones con Data.

Antes de la version 7.4 de ABAP se tenia que declarar en 2 lineas

- DATA: v_ejemplo TYPE string.

- v_ejemplo = 'texto'.

a partir de la versión 7.4 podemos hacerlo de la siguiente manera:

- DATA(v_ejemplo) = 'texto'.

2.2- Loop AT INTO workarea

En este caso ocurre lo mismo se declaraba primero el workarea para recorrer una tabla dentro del loop.

antes de ABAP 7.4 :

- DATA ti_ejemplo TYPE TABLE OF scarr WITH KEY carrid,

wa_ejemplo LIKE LINE OF ti_ejemplo.

- LOOP AT ti_ejemplo INTO wa_ejemplo.

- ENDLOOP.

a partir de ABAP 7.4:

- LOOP AT ti_ejemplo INTO DATA(wa_ejemplo).

- ENDLOOP.

2.3 CALL METHOD

Antes de ABAP 7.4

Se declaraban primero los atributos y luego en la llamada del método.

A partir de ABAP 7.4

Se puede hacer en una sola linea

Referencias: imagen 2.3.1 y 2.3.2

2.4 LOOP AT ASSIGNING

Antes de ABAP 7.4

Se declaraba primero un FIELD SYMBOL que luego se asignaba al momento de hacer el LOOP a una tabla interna para almacenar cada registro de la tabla.

A partir de ABAP 7.4

Se pueden hacer ambos en una sola linea

Referencias: Imagen 2.4.1 y 2.4.2.

2.5 READ TABLE ASSIGNING

Antes de ABAP 7.4

Se declaraba primero un FIELD SYMBOL que luego se asignaba al momento de leer un registro de una tabla interna para almacenar el registro de la tabla en dos lineas (Imagen 2.5.1)

A partir de ABAP7.4.

Podemos hacer ambos en una sola linea (Imagen 2.5.2)

2.6 SELECT INTO TABLE

Antes de ABAP 7.4

Primero se declaraba la tabla interna para luego usarla para almacenar el resultado de un SELECT (imagen 2.6.1).

A partir de ABAP7.4.

Podemos hacer los 2 pasos en una sola linea (imagen 2.6.2)

2.7 SELECT SINGLE INTO

Antes de ABAP 7.4

primero se creaba la variable para almacenar el resultado del SELECT y luego se ejecutaba el SELECT (imagen 2.7.1)

A partir de ABAP7.4.

Podemos hacer los 2 pasos en una linea (imagen 2.7.2).

3- Expresiones con tablas.

Respecto al manejo de tablas internas si hay varios cambios a partir de ABAP 7.4.

El más significativo es que ahora al momento de hacer un READ si no se encuentra una linea de la tabla se lanza la excepción "CX_SY_ITAB_LINE_NOT_FOUND" en lugar de cambiar de valor la variable "SY-SUBRC".

3.1 READ TABLE INDEX

Antes de ABAP 7.4 :

- DATA ti_ejemplo TYPE TABLE OF scarr WITH KEY carrid,

wa_ejemplo LIKE LINE OF ti_ejemplo.

- READ TABLE ti_ejemplo INTO wa_ejemplo INDEX 1.

- ENDLOOP.

A partir de ABAP 7.4:

- DATA(wa_ejemplo) = ti_ejemplo[ 1 ].

3.2 READ TABLE WITH KEY

Antes de ABAP 7.4 :

- DATA ti_ejemplo TYPE TABLE OF scarr WITH KEY carrid,

wa_ejemplo LIKE LINE OF ti_ejemplo.

- READ TABLE ti_ejemplo WITH KEY carrid = 'LH' INTO wa_ejemplo.

A partir de ABAP 7.4:

- DATA(wa_ejemplo) = ti_ejemplo[ carrid = 'LH' ]-carrname.

3.3 EXISTE EL REGISTRO?

Antes de ABAP 7.4 :

- SELECT * FROM scarr INTO TABLE ti_ejemplo.

- READ TABLE ti_ejemplo WITH KEY carrid = 'AA' TRANSPORTING NO FIELDS.

- IF SY-SUBRC = 0.

- ENDIF.

A partir de ABAP 7.4:

- IF line_exists( ti_ejemplo[ carrid = 'AA' ]-carrname ).

- ENDIF.

3.4 Obtener el indice de una tabla

Antes de ABAP 7.4

- DATA: ti_scarr TYPE SORTED TABLE OF scarr WITH UNIQUE KEY carrid,

v_indexx TYPE i.

- SELSCT * FROM scarr INTO TABLE ti_scarr

- READ TABLE ti_scarr WITH TABLE KEY carrid = 'AA' TRANSPORTING NO FIELDS.

- IF SY-SUBRC = 0.

v_index = SY-TABIX.

-ENDIF

A partir de ABAP 7.4

- DATA( v_index ) = line_index( ti_scarr[ carrid = 'AA'] ).

NOTA: El hacer referencia a un registro inexistente de una tabla interna producirá un "DUMP". Se recomienda asignar un "FIELD SYMBOL" y chequear el SY-SUBRC de la siguiente forma:

- ASSING it_tab[1] to FIELD-SYMBOL().

- IF SY-SUBRC EQ 0.

- ENDIF.

4-Expresiones de constructor

Las expresiones del constructor nos permiten inicializar o crear objetos, estructuras de datos, referencias de datos.

El beneficio se logra gracias a la reducción de las declaraciones necesarias. Así como la compatibilidad con las "Inline Declarations".

CLASS lcl_reporte DEFINITION.

PUBLIC SECTION.

METHODS:

constructor IMPORTING iv_rec TYPE i,

sleleccionar_datos,

imprimir_datos.

PRIVATE SECTION.

DATA: v_rec TYPE i.

ENDCLASS.

CLASS lcl_reporte IMPLEMENTATION.

METHOD constructor.

WRITE: / '------'.

WRITE: / 'Nuevo objeto', iv_rec.

v_rec = iv_rec.

ENDMETHOD.

METHOD seleccionar_datos.

WRITE: / 'Seleccionar datos', v_rec.

ENDMETHOD.

METHOD imprimir_datos.

WRITE: / 'Imprimir datos', v_rec.

ENDMETHOD.

ENDCLASS.

START-OF-SELECTION.

DATA: lo_reporte TYPE REF TO lcl_reporte.

-> CREATE OBJECT lo_reporte EXPORTING. iv_rec = 5.

Para crear una instancia de un objeto utilizamos el operador "NEW", ya que nos permite declarar una instancia de un objeto directamente en línea.

Los parámetros para el Constructor son transferidos cuando el método es llamado

- data(lo_reporte) = NEW lcl_reporte( 1 ).

También podemos utilizar expresiones para inicializar estructuras o tablas internas, para ello usaremos "VALUE".

Antes de ABAP 7.4 para inicializar una estructura o workarea usábamos el siguiente código

- DATA: ls_carr TYPE scarr.

- ls_carr-carrid = 'LH'.

- ls_carr-carrname = 'Lufthansa'.

A partir de ABAP 7.4

Usando el operador VALUE y la expresión del constructor podemos hacer lo mismo pero en una línea.

- ls_carr = VALUE # ( carrid = 'LH' carrname = 'Lufthansa' ).

Una ventaja del operador VALUE es que puede ser usado en las "Inline Declarations", pero al hacerlo tendremos que indicar el tipo exacto de dato a usar.

- DATA(ls_carr) = VALUE scarr( carrid = 'LH' carrname = 'Lufthansa' ).

El operador "VALULE" también puede ser usado para inicializar tablas internas.

DATA: lt_carrier TYOPE TABLE OF scarr.

lt_carrier = VALUE # ( ( carrid = 'AA' carrname = 'American Airlines' ) ( carrid = 'LH' carrname = 'Lufthansa') ).

Otro operador que podemos usar es "REF" el cual usamos para crear una referencia de datos junto con la sentencia "GET REFERENCE".

Además de los operadores ya mencionados existen otros como "CONV" para conversiones o conversiones de tipo "CAST".

Un objeto no debe ser inicializado 2 veces.

5- Operador CORRESPONDING

Este operador es muy usado al momento de trabajar con tablas internas y estructuras, también fue optimizado y podemos usarlo en una sola línea.

- wa_lline2 = CORRESPONDING #( wa_line1 ).

De esta manera el contenido de wa_line1 se pasa a la wa_line2 solo si hay campos que tengan el mismo nombre y tipo de datos, los campos que no sean iguales serán inicializados.

Antes de ABAP 7.4

Usábamos MOVE-CORRESPONDING para asignar el contenido de una estructura a otra sin inicializar la estructura destino.

A partir de ABAP 7.4

- wa_line2 = CORRESPONDING # ( BASE (wa_line2) wa_line1 ).

De la siguiente manera podriamos crear una tercera estructura basada en la segunda y pasar solo lo correspodiente de la primera.

- DATA(wa_line3) = CORRESPONDING wa_line2( BASE (wa_line2) wa_line1 ).

Esto funciona exactamente igual que usar "MOVE-CORRESPONDING".

6-Operaciones con caracteres.

Antes de ABAP 7.4

Usábamos "'" para identificar una cadena de caracteres

- DATA: v_string TYPE string.

- v_string = 'Esto es un texto'.

- WRITE: / (30) v_string.

A partir de ABAP 7.4

Identificamos la cadena de caracteres rodeándola con el siguiente carácter "|"

- DATA: v_string TYPE string.

- v_string = |Esto es un texto.|.

- WRITE: / (30) v_string.

Dentro de una cadena de caracteres podemos envolver con llaves los siguientes objetos y expresiones evitando así que sean tomados como caracteres.

-> Objetos de datos.

-> Expresiones de cálculo.

-> Expresiones de constructores.

-> Expresiones de tablas.

-> Funciones predefinidas.

-> Métodos funcionales y encadenamiento de métodos.

Por ejemplo:

- DATA: v_string TYPE string.

- v_string = |El código de retorno es: { SY-SUBRC } |.

- WRITE: / (30) v_string.

La sentencia CONCATENATE también fue optimizada

- DATA(vl_output) = |Hola| & | | & |Mundo|.

Agradecimiento:

Ha agradecido este aporte: Abraham Noriega Cabrera


Sobre el autor

Publicación académica de Jesús Heriberto Quiñonez López, en su ámbito de estudios para el MASTER ABAP for HANA.

SAP SemiSenior

Jesús Heriberto Quiñonez López

Profesión: Desarollador de Software - Mexico - Legajo: KH27S

✒️Autor de: 14 Publicaciones Académicas

🎓Egresado del módulo:

Disponibilidad Laboral: FullTime

Presentación:

Mi nombre es heriberto quiñonez. actualmente me desempeño como analista de desarrollo de aplicaciones y sistemas. estoy en búsqueda de mi desarrollo y crecimiento tanto personal como profesional.

Certificación Académica de Jesús Quiñonez

 

:: Al igual que Jesús ¿Usted está dispuesto a aprender ABAP HANA?

El lunes 17 Enero 2022 comenzamos el 🎓MASTER ABAP for HANA.
Juntos para realizar sus más grandes desafíos!

 Cargando presentación, aguarde unos instantes...

 

 

+Recursos Gratuitos en CVOSOFT:

¡Lo importante es aprender!, por eso en CVOSOFT la comunidad SAP más grande de habla hispana, ponemos a su alcance los siguientes recursos abiertos libres y gratuitos:

Buscador de Publicaciones:

 

 

Consultas y Soporte

👋Hola! Estamos listos para ayudarle con el soporte que su carrera merece.

Acceda sección contacto y seleccione canal de comunicación más cómodo para usted.

🤝Aguardamos su mensaje, ¡Éxitos!

 


 

👉Que las empresas tomen en serio sus estudios es muy importante para que su inversión educativa tenga sentido.
Las empresas líderes de United States y del Mundo confían a CVOSOFT su recurso más valioso, la formación de su gente.

¿Quieres conocerlas?