🚀PROMO #PLANCARRERA2024 - 🔥Bonificaciones, Precios Congelados y Cuotas

 X 

✒️ABAP HANA Las mejoras a partir de ABAP 7.40

ABAP HANA Las mejoras a partir de ABAP 7.40

ABAP HANA Las mejoras a partir de ABAP 7.40

Se implementó una serie de mejoras en el lenguaje ABAP

AS ABAP 7.40 es sucesor de AS ABAP 7.31

Mayor orientación hacia las expresiones, haciendo poder reducir el código y el paradigma code pushdown

1.1 ¿Cómo determinamos con cual versión de ABAP estamos trabajando?

Ingresamos a un modo SAP > Menú Sistema > Status

Clic en "Componentes" (Product version

Buscamos SA_BASIS y SAP_ABA

1.2 ¿De donde venimos, donde estamos y hacia donde vamos?

Versiones:

7.0 : Fue orientado a declaraciones.

7.02: Se habilitpo la expresión. Expresiones de cadena con operador de concatenación && combinadas con cadenas. Podemos mandar el valor directo de la tabla concatenando con expresiones.

7.40: Orientado a la expresión real:

Al momento de buscar en tabla podemos genrar al vuelo una variable auxiliar DATA(wa_tabla).

En la misma expresión podemos hacer la busqueda del registro y ahí enviar el valor que buscamos.

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

Especificaciones:

Lanza servidor SAP de aplicaciones SAP NetWeaver AS ABAP 7.5 y con él ABAP 7.5

Es compatible con el servidor ode aplicaciones aBAP 7.4

Corre con el kernel 7.45

Solo funciona con sistemas Unicode

Soporta la base de datos SAP HANA y otras

Facilita la explotacion de HANA

Ofrece un modelo de programación ABAP común

SAP Fiori como UX

Compatible con industria 4.0 y escenarios de big data

Moderniza y simplifica el lenguaje ABAP

Experiencia de desarrolllo de primera clase en Eclipse

Herramientas de administración de código personalizada para una actualización y migración simples a SAP S/4 HANA

2 Declaraciones en línea (Inline Declarations)

Deberan ser usadas para reducir y optimizar el código, pero no abusar de ellas ya que podrían ser muy complejo seguir el código a un futuro

2.1 Declaraciones con DATA

Antes declarabamos y luego asignabamos

Ahora se pude ser en un paso: DATA(v_texto) = 'Hola Mundo'.

2.2 Loop AT INTO work area

Antes se declaraban tanto tabla como work area

Ahora se puede declarar el work area al momento del loop: LOOP AT ti_carrier INTO data(wa_carrier). ENDLOOP.

2.3 CALL METHOD

Antes declarabamos atributos para utilizarlso en la llamada, en dos lineas

Ahora podemos declarar en una sola linea:

TRY

cl_salv_table=>factory( IMPORTING r_salv_table = data(lo_alv_inline)

ChANGING t_table = lt_data ).

lo_alv->display().

CATCH cx_salv_msg INTO data(lo_exc_inline).

MESSAGE lo_exc_inline TYPE 'I' DISPLAY LIKE 'E'.

ENDTRY.

2.4 LOOP AT ASSINGNING

Ahora podemos hacerlo en una linea: LOOP AT ti_burks ASSIGNING field-symbol(<wa_bukrs>). ENDLOOP.

2.5 READ TABLE ASSIGNING

Ahora podemos hacerlo en una linea: READ TABLE ti_matnr ASSIGNING field-symbol(<wa_matnr>) INDEX 3.

2.6 SELECT INTO TABLE

Ahora podemos hacerlo en una linea: SELECT * FROM scarr INTO TABLE @data(ti_scarr).

2.7 SELECT SINGLE INTO

Ahora podemos declar la variable dentro del select:

SELECT SINGLE carrname

FROM scarr

WHERE carrid EQ 'AA'

INTO @data(v_carrname).

Las declaraciones no cambian el alcance de las variables ABAP, por lo tanto no se puede usar el mismo nombre de variable varias veces en un metodo. Son utiles para variables con un contexto de uso limitado y local.

No se pueden utilizar para definir el resultado de un SELECT INTO o INTO TABLE

3 Expresiones con Tablas

3.1 READ TABLE INDEX

Ahora podemos leer un registro puntual de una tabla interna así: data(wa_carrier) = ti_carrier[ 1 ].

3.2 READ TABLE WITH KEY

Ahora podemos leer un registro de una tabla interna utilizando campos clave así: DATA wa_carrier = ti_carrier[ carrid = 'LH' ]. **

3.3 ¿Existe el registro?

Ahora podemos determinar si existe el registro en una ti_ así: IF line_exists( ti_carrier[ carrid ='AA'] ).

3.4 Obtenemos el índice de una tabla

Ahora podemos determinar el indice de una ti_ así: DATA(v_index) = line_index( ti_scarr[ carrid = 'AA'] ).

Si no encuentra nada se producirá un dump por ello SAP recomienda hacer un field-symbol y checar el SY-SUBRC de la siguiente manera

ASSIGN lt_tab to FIELD-SYMBOL().

IF sy-subrc EQ 0. ENDIF.

4 Expresiones de constructor

Nos permiten crear e inicializar objetos ABAP, estructuras y referencias por medio de expresión.

Antes para declarar objetos era:

DATA: lo_reporte TYPE REF TO lcl_reporte.

CREATE OBJECT lo_reporte EXPORTING iv_rec = 5.

Ahora podemos hacerlo en una linea:

data(o_reporte) = NEW lcl_reporte( 1 ).

NEW será el operador que nos permitirá declararlo en linea.

Antes para inicializar los campos de una estructura o work area era:

DATA: ls_carr TYPE scarr.

ls_carr-carrid = 'LH'.

ls_carr-carrname = 'Lufthansa'.

Ahora podemos hacerlo en una linea:

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

VALUE será el operador que utilizaremos.

También podemos combinar la expresión VALUE con una declaración en linea:

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

Tenemos que declaran el tipo de dato exacto.

También podemos utilizar el operador VALUE para inicializar tablas:

DATA: lt_carrier TYPE TABLE OF scarr.

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

( carrid = 'LH' carrname = 'Lufthansa' ) ).

Otro operador muy utilizado es REF junto con GET REFERENCE, se utiliza de la siguiente manera:

TRY

"Preparamos la conexión SQL.

data(lo_result_set) = cl_sql_connection=>get_connection()->create_statement()->execute_query( iv_statement ).

lo_result_set->set_parama-table( ref #(lt_result ) ).

"Obtenemos el resultado.

lo_result_set->next_package( ).

lo_result_set->close( ).

CATCH cx_sql_exception INTO data(lo_exc).

"Manejo de los errores.

ENDTRY-

5 El operador CORRESPONDING

Pasar el contenido inicializando previamente el contenido, antes lo usabamos así:

CLEAR wa_line2.

MOVE-CORRESPONDING wa_line1 TO wa_line2.

Ahora podemos hacerlo así:

wa_line2 = CORRESPONDIGN #( wa_line1 ).

Los campos que no sean iguales o no coincidan entre ambas estructuras serán inicializados.

Para asignar el contenido sin previamente inicializar el contenido, podemos hacerlo así:

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

Para asignar contenido teniendo 3 tablas sin previamente inicializar el contenido, podemos hacerlo así:

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

6 Operaciones con caracteres

Ahora podemos indentificar las cadenas rodeandolas por dos |(pipes), así:

DATA: v_string TYPE string.

v_string = |Esto es un texto literal.|.

WRITE: / (30) v_string.

Podrán no ser considerados caracteres, si encerramos dentro de llaves {} los siguientes objetos:

Objetos de datos

Expresiones de cálculo

Expresiones de constructores

Expresiones de tablas

Funciones predefinidas

Métodos funcionales y encadenamiento de métodos

Esto último se hacía así antes:

DATA: v_string TYPE string,

v_syssubrc_c(4) TYPE c.

CLEAR v_syssubrc_c.

v_syssubrc_c = sy-subrc.

CONCATENATE 'El código de retorno es:' v_syssubrc_c INTO v_string SEPARATED BY space.

WRITE: /(30) v_strign.

Ahora lo podremos hacer así:

DATA: v_string TYPE string.

v_string |El código de retorno es: { sy-subrc }|.

WRITE: /(30) v_string.

Para concatenar caracteres, lo hacíamos así:

DATA:v vl_output TYPE string.

CONCATENATE 'Hola' 'Mundo' INTO vl_outputy SEPARATED BY space.

Ahora lo podemos hacer así:

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


 

 

 

Agradecimiento:

Ha agradecido este aporte: Jesús Quiñonez López


Sobre el autor

Publicación académica de Martín Ramssés Gómez Rodríguez, en su ámbito de estudios para el Máster ABAP for HANA.

SAP SemiSenior

Martín Ramssés Gómez Rodríguez

Profesión: Desarrollador Software - Mexico - Legajo: QS57M

✒️Autor de: 10 Publicaciones Académicas

🎓Egresado del módulo:

Disponibilidad Laboral: FullTime

Presentación:

Desarollarme profesionalmente para seguir apoyando a la sociedad, de manera ética y con valores

Certificación Académica de Martín Gómez