Loading AI tools
lenguaje de programación De Wikipedia, la enciclopedia libre
ABAP (Advanced Business Application Programming) es un lenguaje de cuarta generación, propiedad de SAP, que se utiliza para programar la mayoría de sus productos (R/3, mySAP Business suite...). Utiliza sentencias de Open SQL para conectarse con prácticamente cualquier base de datos. Cuenta con miles de funciones para el manejo de archivos, bases de datos, fechas, etc. Permite conexiones RFC (Remote Function Calls) para conectar a los sistemas SAP con cualquier otro sistema o lenguaje de programación.
ABAP/4 | ||
---|---|---|
SAP SE http://scn.sap.com/community/abap | ||
Información general | ||
Paradigma | Orientado a objetos, estructurado, imperativa | |
Apareció en | 1983 | |
Diseñado por | SAP AG | |
Implementaciones | SAP R/2, SAP R/3 | |
Influido por | Objective-C, COBOL, SQL | |
Licencia | licencia privativa | |
SAP suministra una instalación limitada de R/3 llamada MiniSAP para la práctica de la programación en ABAP. MiniSap ha sido reemplazado por SAP NetWeaver 7.03 Trial Versión
ABAP fue desarrollado por SAP como lenguaje de informes para SAP R/2, en los años 80, una plataforma que permitía a las grandes corporaciones construir aplicaciones de negocios para gestión de materiales y finanzas. ABAP, muy parecido al COBOL en sus orígenes, originalmente significaba Allgemeiner Berichtsaufbereitungsprozessor, palabras alemanas para procesador genérico para la preparación de informes. En sus inicios ABAP incluía el concepto de Bases de datos lógicas, que suministraba un alto nivel de abstracción para el acceso a bases de datos.
ABAP fue pensado como un lenguaje de programación para que los usuarios finales pudieran manipular la información, pero el 4GL se fue volviendo demasiado complicado para usuarios normales, por lo que es necesario programadores experimentados para realizar desarrollos.
ABAP se mantuvo como el lenguaje de desarrollo para la siguiente versión cliente-servidor de SAP R/3, que fue lanzada al mercado en 1992, en el que casi todo el sistema, menos las llamadas al sistema básicas estaban escritas en ABAP. En 1999, con el lanzamiento de la versión 4.6 de R/3, SAP lanzó una extensión orientada a objetos denominada ABAP Objects. La versión más actual en estos momentos de SAP es la release 6.6.
La última plataforma de desarrollo de SAP, NetWeaver, soporta ABAP y Java como lenguajes de programación.
Una transacción en terminología SAP es la ejecución de un programa. La forma normal de ejecutar código ABAP en el sistema SAP es ingresando un código de transacción (por ejemplo, VA01 es el código de transacción para “Crear Órdenes de Venta”). Las Transacciones pueden ser llamadas a través de menús definidos por el sistema, especificados por el usuario o basados en roles. También pueden ser invocados mediante el ingreso del código de transacción directamente en el campo de comandos, el cual está presente en todas las pantallas SAP. Las transacciones también pueden ser invocadas por código mediante las sentencias ABAP “CALL TRANSACTION” y “LEAVE TO TRANSACTION”. El término “transacción” no debe ser mal interpretado, en el contexto aquí descrito una transacción simplemente significa el llamado a la ejecución de un programa. En otros contextos de programación, “transacción” se refiere a menudo a una operación indivisible sobre datos. Este último concepto también existe en SAP y es llamado LUW (Logical Unit of Work) . En el transcurso de una transacción (ejecución de un programa), puede haber diferentes LUWs.
ABAP es un lenguaje de programación lógicamente sobre la plataforma de SAP. Se recomienda instalar SAP ECC, en la modalidad de tres capas, server-presentation-database. La academia ABAP es muy recomendada para aquellos que sean apasionados de la programación en SAP, ya que lo anteriormente comentando es sólo una pequeña parte de lo que puede abarcar el sistema SAP.
Como en otros lenguajes de programación, un programa ABAP no es simplemente una unidad ejecutable o una biblioteca, sino que proporciona código ejecutable para otros programas no ejecutado independientemente.
ABAP distingue entre dos tipos de programas:
Los informes siguen un modelos de programación relativamente simple, donde el usuario introduce una serie de parámetros y el programa los usa para producir un informe en forma de lista interactiva. El término informe puede llevar a equívoco puesto que los informes pueden ser diseñados para modificar datos, la razón por la que estos programas se llaman informes es la “lista-orientada” que estos producen como salida.
Los module pools definen unos patrones más complejos de interacción con el usuario a través de una colección de pantallas. El término “pantalla” se refiere a la actualidad, la imagen física que los usuarios pueden ver. Cada pantalla también tienen un “flujo lógico”, el cual se refiere a código implícito de ABAP invocado por las pantallas. Cada pantalla tiene su propio flujo lógico, el cual se divide en “PBO”(Process Before Output) y PAI (Process after Input). En la documentación de SAP el término “dynpro” (programa dinámico) se refiere a la combinación entre las pantallas y el flujo lógico.
Los tipos de programas no ejecutables son:
Un Include module incluye en tiempo de generación en la unidad de llamada; esto es usado en ocasiones para subdividir programas muy largos. Subroutine pools contienen subrutinas ABAP (bloques de código cerrados por FORM/ENDFORM e invocados por PERFORM). Las Functions groups son librerías de módulos de funciones(encerradas entre FUNCTION/ENDFUNCTION e invocadas por CALL FUNCTION). Los object clases e interfaces son similares a las clases e interfaces de java; las primeras definen una serie de métodos y atributos y las segundas contienen la definición de los métodos, para cada una de las clases implementadas se debe ofrecer el código de la misma. Las Type pools definen una colección de datos, tipos y constantes.
La plataforma de trabajo de ABAP contiene diferentes herramientas para la edición de programas. La más importante son(Los códigos de transacción[1] aparecen entre paréntesis):
El navegador de objetos(SE80) proporciona una interfaz integrada simple para todas estas herramientas.
El diccionario ABAP contiene todos los metadatos acerca del sistema SAP. Está muy ligado con la plataforma de trabajo de ABAP en el que cualquier referencia a los datos se obtiene del diccionario (por ejemplo, tablas, vistas, tipos de datos ). Los desarrolladores usan el diccionario de transacciones de ABAP (directamente o a través del objeto navegador dentro de la plataforma de trabajo SE80) para mostrar y mantener los metadatos.
Cuando un objeto del diccionario es modificado, un programa que lo referencie automáticamente cambia su referencia al nuevo estado del objeto la próxima vez que se ejecute. Ya que ABAP es interpretado, no es necesario recompilar programas que referencien a objetos que se modifiquen dentro del diccionario
A continuación una breve descripción de los tipos de datos más importantes del diccionario:
Una breve descripción acerca de la sintaxis de ABAP comienza inevitablemente por el conocido “Hola mundo”
REPORT TEST.
WRITE 'Hola Mundo'.
Este ejemplo contiene dos declaraciones: REPORT y WRITE. El programa muestra una lista en pantalla. En este caso, la lista consiste en una simple línea donde pondrá “Hola Mundo”. La declaración REPORT indica que este programa es un informe. Alternativamente se podría usar PROGRAM para los ‘module pool’
El formato básico de las reglas ABAP es simple:
Para asegurar que un código sea legible, el editor de ABAP proporciona una pequeña función de edición, que se encarga de colocar correctamente el sangrado. Esta también ofrece la posibilidad de escoger entre algunos modelos estandarizados acerca de las mayúsculas (por ejemplo todo mayúsculas, todo minúsculas, mayúsculas para declaraciones y palabras clave… etc.).
Si un texto en una declaración ABAP ocupa más de una línea, podemos usar el carácter & para combinar la sucesión de las mismas como si fuera una sola.
USERPROMPT = 'Por favor doble clic en la lista de salida ' &
'para ver la información completa de la transacción.'.
La regla de que los elementos deben estar separados al menos por un espacio, incluye también a los paréntesis, operadores y otros símbolos, por ejemplo el siguiente código sería incorrecto:
X=(A+B)-(C+2).
Los nombres de las variables (A,B,C,X) son constantes numéricas, los operadores "=", "+" y "-" y el paréntesis deben estar delimitados por un espacio en blanco. La forma correcta sería:
X = ( A + B ) - ( C + 2 ).
Declaraciones consecutivas que posean una idéntica primera parte, se pueden combinar en una declaración “encadenada” usando el operador de cadenas “:”. La parte común de las declaraciones se escribe a la izquierda de los dos puntos y las diferentes a la derecha separadas por comas. El operador dos puntos está unido directamente con el elemento anterior, sin un espacio. El encadenamiento se usa normalmente con WRITE. Este acepta solo un argumento, con el operador dos puntos podremos encadenar por ejemplo 3 campos.
WRITE FLIGHTINFO-CITYFROM.
WRITE FLIGHTINFO-CITYTO.
WRITE FLIGHTINFO-AIRPTO.
Encadenar los campos hace que el código sea más legible y tenga una forma más intuitiva
WRITE: FLIGHTINFO-CITYFROM, FLIGHTINFO-CITYTO, FLIGHTINFO-AIRPTO.
En una declaración encadenada, la primera parte no se limita al nombre del comando sólo. Toda la parte común de las declaraciones se pueden colocar antes de los dos puntos. Por ejemplo:
REPLACE 'A' WITH 'B' INTO LASTNAME.
REPLACE 'A' WITH 'B' INTO FIRSTNAME.
REPLACE 'A' WITH 'B' INTO CITYNAME.
Se puede reescribir como:
REPLACE 'A' WITH 'B' INTO: LASTNAME, FIRSTNAME, CITYNAME.
ABAP posee dos formas de definir comentarios:
REPORT BOOKINGS.
* Leer las reservas de vuelos de la base de datos
SELECT * FROM FLIGHTINFO
WHERE CLASS = 'Y' "Y = precio
OR CLASS = 'C'. "C = clase
(...)
El lenguaje ABAP es sensible a los espacios en blanco.
x = a+b(c).
La sentencia anterior asigna a x la subcadena de caracteres de la variable a, empezando desde la posición b hasta completar una subcadena de c caracteres, donde x y a son cadenas de caracteres, mientras que b y c son números enteros.
Sin embargo, si añadimos espacios de por medio a la misma expresión, hace algo completamente diferente, como podemos ver a continuación:
x = a + b( c ).
La sentencia anterior asigna a la variable x la suma de la variable a y el resultado de llamar al método b pasándole el parámetro c.
ABAP proporciona un conjunto de tipos de datos de serie. Además, cada estructura, tabla, vista o elemento definido en el diccionario de ABAP puede ser usado como tipo de variable. También las interfaces y las clases de objetos.
Tipo | Descripción |
---|---|
I | Entero (4-bytes) |
P | decimal |
F | punto flotante |
N | carácter numérico |
C | carácter |
D | fecha |
T | tiempo |
X | Hexadecimal (raw byte) |
STRING | Cadena de caracteres |
XSTRING | Variable-length raw byte array |
Las variables y constantes del tipo D contienen un número de días desde el 1 de enero de año 1. Las variables de tipo T contienen el número de segundos desde media noche. Una característica especial de estos tipo es que se puede acceder a ellos como enteros y como cadenas de caracteres(poseen el formato interno “YYYYMMDD” para los tipo fecha y “hhmmss” para las variables de tipo T) lo que hace que sea muy sencillo manejar fechas. Por ejemplo el código a continuación calcula el último día del mes anterior.
DATA LAST_EOM TYPE D. "Último día del pasado mes
* empezando desde hoy
LAST_EOM = SY-DATUM.
* Ponemos los caracteres 6 y 7 de YYYYMMDD como cadena a "01",
* dando el primer día del mes actual
LAST_EOM+6(2) = '01'.
* restamos 1 día
LAST_EOM = LAST_EOM - 1.
WRITE: 'el último día del mes anterior fue', LAST_EOM.
Todas las variables en ABAP tienen que declararse explícitamente para que puedan usarse. Normalmente todas las declaraciones se colocan en la parte superior del código antes de la primera sentencia de ejecución; este lugar es por convención no una regla de sintaxis. La declaración consiste en el nombre, tipo, longitud(cuando corresponda), modificadores adicionales (como número de decimales) y el valor inicial de la variable:
DATA: COUNTER TYPE I,
VALIDITY TYPE I VALUE 60,
TAXRATE(3) TYPE P DECIMALS 1,
LASTNAME(20) TYPE C,
DESCRIPTION TYPE STRING.
* Tipo del diccionario:
DATA: ORIGIN TYPE COUNTRY.
* Tablas internas:
DATA: T_FLIGHTS TYPE TABLE OF FLIGHTINFO,
T_LOOKUP TYPE HASHED TABLE OF FLT_LOOKUP.
* Objetos:
DATA: BOOKING TYPE REF TO CL_FLT_BOOKING.
Recuerde usar los dos puntos para encadenar sentencias.