SAP: La programación ABAP

12

Click here to load reader

description

Tutorial sobre la programación en un sistema SAP

Transcript of SAP: La programación ABAP

Page 1: SAP: La programación ABAP

La programación en SAP

Alejandro Torrijos Página 1

LA PROGRAMACIÓN EN UN SISTEMA SAP

APLICACIONES ABAP

Los programas de SAP tienen dos partes muy diferenciadas, el flujo

lógico de pantallas y el flujo lógico del proceso. Para esto último se

usa el lenguaje ABAP que es un lenguaje propietario de SAP. Las

aplicaciones ABAP tan sólo se pueden ejecutar en un servidor SAP, lo

que las hace independientes del hardware y del sistema operativo de

la máquina.

Las pantallas están diseñadas para interactuar con el usuario, se

procesan por el procesador de pantallas e incluyen una máscara y

una lógica. Las pantallas se programan en un lenguaje de

programación similar a ABAP.

El usuario, al interactuar con la pantalla, ejecuta módulos de

programación ABAP. Estos módulos reciben datos de la pantalla, los

procesan y, o bien devuelven otros datos de vuelta a la pantalla, o

interactúan con la base de datos.

Para interactuar con la base de datos SAP tiene un lenguaje

específico llamado OPEN SQL. SAP también permite interactuar con la

base de datos directamente mediante el SQL estándar (con las

variantes propias de la base de datos utilizada).

INTERFACES GRÁFICAS DE USUARIO (SCREENS)

Las pantallas (screens) tienen una máscara que, bien se crea por

defecto, o bien puede ser diseñada por el programador. Las pantallas

generales las diseña el programador mediante el Screen Painter.

Page 2: SAP: La programación ABAP

La programación en SAP

Alejandro Torrijos Página 2

Antes de desplegarse una pantalla se produce el PBO (Process Before

Output). Cuando el usuario realiza alguna acción se produce el PAI

(Process After Input). El PBO y el PAI son bloques de instrucciones.

En su conjunto forman un diálogo con el usuario. Las instrucciones

más importantes en este lenguaje de pantallas son: MODULE, FIELD,

CHAIN, LOOP... Estas instrucciones tienen como función llamar

módulos (aplicaciones ABAP) y controlar la transferencia de datos

entre la pantalla y la aplicación, por ejemplo asignando valores

introducidos por pantalla a las variables declaradas en una aplicación

ABAP.

Las pantallas de SAP tienen los típicos elementos gráficos (campos,

botones, casillas…). Cada elemento debe tener asignado un nombre y

se almacena en la memoria interna del sistema. Se pueden enlazar

estos elementos con los del diccionario ABAP. El contenido

introducido en estos campos de la pantalla se asigna a las variables

del programa con el mismo nombre.

Cada pantalla activa unos módulos en la aplicación ABAP asociada a

esa pantalla. El PBO de la aplicación prepara los campos de la

pantalla, y el PAI procesa los datos introducidos por el usuario.

PANTALLAS DE SELECCIÓN (SELECTION SCREENS)

Las pantallas de selección sirven para introducir valores, por lo tanto,

se usan fundamentalmente antes de acceder a una base de datos. Se

delaran en la aplicación mediante instrucciones ABAP (PARAMETERS,

SELECT-OPTIONS y SELECTION-SCREEN). El flujo lógico de la

pantalla de selección se crea por defecto.

Los elementos más importantes de una pantalla de selección son los

campos para insertar bien valores individuales, o bien tablas enteras.

Se pueden usar unos valores preseleccionados para estos campos

(variants).

Para activar una pantalla de selección en una aplicación ABAP se usa

la instrucción CALL SELECTION-SCREEN. En ese momento se ejecuta

la pantalla de selección declarada al inicio de la aplicación.

LISTAS

Las listas son pantallas que despliegan datos de forma ordenada. Lo

único que puede enviar un sistema SAP a la cola de impresión son las

listas. Para activar una lista en una aplicación ABAP usamos la

Page 3: SAP: La programación ABAP

La programación en SAP

Alejandro Torrijos Página 3

instrucción LEAVE TO LIST-PROCESSING. En ese momento se ejecuta

la lista declarada al inicio de la aplicación. El flujo lógico de la pantalla

lo crea el sistema por defecto. Las listas permiten al usuario

interactuar con el sistema (incluso introducir datos). Una sola

aplicación puede desplegar hasta 21 listas principales. Cada lista

principal puede desplegar hasta 20 listas detalladas.

Para configurar una lista usamos las instrucciones WRITE, SKIP,

ULINE, NEW-PAGE… El procesador de listas las interpreta.

LA PROGRAMACIÓN TRADICIONAL ABAP

La estructura de un programa ABAP es la siguiente:

1. Introducción

2. Declaración de variables

3. Módulos de diálogos

4. Bloques de eventos

5. Procedimientos

DECLARACIÓN DE VARIABLES

Primeramente declaramos las variables globales (incluyendo clases,

selection screens…). Los datos globales son visibles para todos los

bloques. Las variables locales se definen dentro de un bloque y son

visibles sólo dentro de ese bloque.

LOS BLOQUES DE PROCESADO

Los bloques se pueden colocar en la aplicación en el orden en que se

desee puesto que no se ejecutan consecutivamente. El código dentro

de un bloque sí se ejecuta de forma estructurada (una instrucción

detrás de otra).

Podemos salir de un bloque mediante la instrucción RETURN. Los

bloques comienzan con una instrucción específica de comienzo de

bloque y terminan implícitamente cuando comienza el siguiente

bloque.

Todas las instrucciones que no sean declarativas deben estar

englobadas en un bloque. Los bloques son los siguientes:

Módulos de diálogo:

Para ejecutar este tipo de bloques usamos la instrucción MODULE y

terminamos con la instrucción ENDMODULE. Este tipo de módulos se

Page 4: SAP: La programación ABAP

La programación en SAP

Alejandro Torrijos Página 4

crean para cada estado (PBO, PAI…). Los módulos del PBO y del PAI

forman un diálogo (dialog step). Las instrucciones se interpretan por

el procesador de diálogos. Los campos de una pantalla de diálogo

deben tener el mismo nombre que el campo correspondiente de una

aplicación ABAP. Los datos se pasan de un campo a otro.

Bloques de eventos:

Estos bloques se activan bien por medio de acciones que el usuario

realiza en las pantallas, o bien por la propia aplicación ABAP. Estos

bloques están previstos para aquellos eventos en los que queremos

que el sistema reaccione. Esto quiere decir que estos bloques no

siempre se ejecutan en cada aplicación ABAP.

Constructor de programas:

Una vez que el programa se ha almacenado en la memoria del

sistema se ejecuta un bloque llamado LOAD-OF-PROGRAM, que tiene

como función construir el objeto que pretendamos (pantalla, lista…).

Bloques de eventos para pantallas de selección:

Una pantalla de selección tiene fundamentalmente dos partes:

Process Before Output (PBO)

Process After Input (PAI).

Podemos crear bloques de código que se activan en el momento en

que el usuario realiza una acción (evento). Los bloques pueden ser:

AT SELECTION-SCREEN OUTPUT (Se ejecutan durante el PBO)

AT SELECTION-SCREEN (Se ejecutan durante el PAI)

AT SELECTION-SCREEN ON… (Se ejecutan durante el PAI)

Por defecto el sistema crea la propia lógica de la pantalla y los

diálogos entre el usuario y la máquina. Los datos se pasan de la

pantalla a la aplicación mediante los campos declarados en el

programa ABAP.

Bloques de eventos para las listas:

Para crear estos bloques usamos instrucciones como WRITE. El

procesador de listas muestra por pantalla la lista y permite al usuario

interactuar con la máquina. El flujo lógico del diálogo se crea por

defecto. Por ejemplo si escribimos en la aplicación la instrucción

WRITE el sistema activa el evento TOP-OF-PAGE. Una vez en la

Page 5: SAP: La programación ABAP

La programación en SAP

Alejandro Torrijos Página 5

pantalla el usuario puede activar el bloque AT LINE-SELECTION, o el

bloque AT USER-COMAND.

Bloques de eventos para aplicaciones ABAP (reports):

Los programas ejecutables de ABAP están estructurados en función a

una serie de eventos, que provocan que se vayan ejecutando

distintos módulos.

1. Cuando lanzamos una aplicación (evento INICIALIZATION) el

sistema lanza el correspondiente bloque.

2. Si existe un evento de selección de datos por pantalla (AT

SELECTION SCREEN), el control pasa al procesador de

pantallas.

3. Si existe un evento de creación de informes (START-OF-

SELECTION) el control pasa al procesador de informes

(reporting). Con el evento END-OF-SELECTION el control vuelve

al procesador de aplicaciones ABAP.

4. Si existe una base de datos lógica, esta llama a sus

correspondientes bloques.

5. Si se produce un evento de despliegue de un listado (AT LINE-

SELECTION) el control pasa al procesador de listados.

6. Si se declara una pantalla de selección al inicio del programa, el

sistema vuelve a esa pantalla una vez que se ha ejecutado la

aplicación ABAP.

PROCEDIMIENTOS

Los procedimientos son bloques que contienen una interfaz y un área

local de datos. Podemos encontrar los siguientes tipos:

Subrutinas:

Las subrutinas en una aplicación ABAP se lanzan con la instrucción

PERFORM…ENDPERFORM.

La subrutina puede ser interna, es decir, parte de un mismo

programa, o bien externa, es decir, que forma parte de otro

programa.

Si la subrutina es interna puede acceder a las variables globales del

programa. Si es externa le podemos pasar parámetros. Una subrutina

puede lanzar a su vez la ejecución de nuevas subrutinas de forma

recursiva.

Page 6: SAP: La programación ABAP

La programación en SAP

Alejandro Torrijos Página 6

Funciones:

Las funciones son módulos externos con una interfaz definida. Para

lanzar una función en ABAP usamos la instrucción

CALL FUNCTION…ENDFUNCTION.

En un sistema SAP las funciones sólo se pueden crear mediante una

aplicación específica llamada Function Builder. Las funciones siempre

deben están dentro de un grupo (function group).

Métodos:

Los métodos en la programación orientada a objetos son el

equivalente a las funciones, pero dentro de las clases. Al igual que las

funciones tienen una interfaz definida. Para lanzar un método en una

aplicación ABAP usamos la instrucción

CALL METHOD…ENDMETHOD.

Los métodos sólo pueden definirse dentro de la implementación de

una clase. Esto se puede hacer de forma global para todo el sistema

(mediante una aplicación específica llamada Class Builder), o bien

localmente dentro de una aplicación ABAP.

Los métodos incorporan los atributos de su clase, y los parámetros

que les pasemos a través de su interfaz.

TIPOS DE PROGRAMAS EN UN SISTEMA SAP

El sistema va ejecutando los distintos bloques de código en una

secuencia determinada. Cada aplicación ABAP tiene asignado un tipo

(se incluye entre los atributos iniciales del programa). Hay siete tipos

de programas:

1. Programas ejecutables

2. Módulos (Module Pools)

3. Grupos de funciones

4. Clases (Class Pools)

5. Interfaces (Interface Pools)

6. Subrutinas (Subroutine Pools)

7. Includes (Inlcude Pools)

Cada tipo de programa tiene unos atributos técnicos específicos.

Page 7: SAP: La programación ABAP

La programación en SAP

Alejandro Torrijos Página 7

Para ejecutar el primer bloque de una aplicación ABAP primero hay

que lanzarla desde el sistema. Este primer bloque puede lanzar un

segundo bloque o bien devolver el control al sistema. Algunos

programas son lanzados automáticamente por el sistema y funcionan

en el background. Lo normal es que sea el usuario el que lance una

aplicación ABAP a través de una interfaz externa a la aplicación, bien

insertando el código de la transacción en el campo correspondiente,

bien a través de un menú. El código de la transacción es un nombre

de hasta veinte caracteres.

Para ejecutar un programa podemos usar las instrucciones

CALL TRANSACTION

LEAVE TO TRANSACTION

Programas ejecutables:

Para crear programas ejecutables usamos el editor de ABAP. Un

programa ejecutable puede incluir todos los tipos de bloques (excepto

funciones). Para lanzar un programa ejecutable usamos la instrucción

SUBMIT.

Los distintos bloques de la aplicación se van ejecutando

automáticamente en una secuencia predefinida. En ocasiones el

usuario puede introducir parámetros a través de una pantalla. A

continuación la aplicación procesa los datos, realiza la búsqueda en la

base de datos y muestra el resultado por la pantalla. Nuevas acciones

del usuario pueden iniciar el proceso de nuevo.

El sistema permite al usuario trabajar con una base de datos lógica

(es decir un programa especial que representa de forma más clara la

base de datos física, que puede estar fragmentada en diversos

componentes repartidos físicamente en distintos lugares).

Los programas ejecutables están diseñados para mostrar informes, es

decir para leer datos de una base de datos y mostrarlos por pantalla.

Por eso también se les conoce como informes (reports). Todos los

programas ejecutables comienzan con la instrucción REPORT.

El programador puede determinar los eventos y variar la lógica

preestablecida, por ejemplo mostrando los datos en un formato de

pantalla en lugar de un listado.

Page 8: SAP: La programación ABAP

La programación en SAP

Alejandro Torrijos Página 8

El programa ejecutable más sencillo debe contener al menos un

bloque de procesado (el bloque START-OF-SELECTION). Los

programas ejecutables no requieren diálogo con el usuario. Los

ejecutables son los encargados de enviar datos a los programas que

se ejecutan en el background.

Si se le ha asignado un código de transacción un programa puede

lanzarse usando este código en lugar del nombre.

Módulos (Module Pool):

Los módulos están pensados para diálogos largos con el usuario

donde se usan numerosas pantallas. Los módulos se crean mediante

la instrucción PROGRAM en el editor de ABAP. Pueden incluir

cualquier tipo de bloque. Tan sólo se controlan desde las pantallas.

Se lanzan mediante el código de la transacción correspondiente, que

enlaza la pantalla inicial del módulo con la aplicación correspondiente.

El resto de las pantallas deben ser definidas con el editor de pantallas

(screen painter).

El proceso es el siguiente:

1. Cuando escribimos el código de la transacción el sistema

despliega la pantalla inicial.

2. Se inicia el módulo de diálogo de la aplicación ABAP.

A partir de este momento el flujo lógico del módulo puede mostrar

más pantallas, llamar a otros módulos, bloques, etcétera.

Funciones:

Las funciones son programas almacenados en el sistema que se

pueden ejecutar desde cualquier aplicación ABAP. Se declaran

mediante la instrucción FUNCTION-POOL. Las funciones pueden

incluir cualquier tipo de bloque. La función puede incluir sus propias

pantallas.

La herramienta Fucntion Builder permite crear funciones y grupos de

funciones desde el banco de trabajo (Workbench) de ABAP.

Clases:

Las clases sólo pueden contener métodos. Se declaran con la

instrucción CLASS-POOL y pueden contener una sola clase global y

cuantas clases locales sean necesarias.

Page 9: SAP: La programación ABAP

La programación en SAP

Alejandro Torrijos Página 9

Se pueden asignar códigos de transacción a los métodos dentro de

una clase global, con lo que, al lanzarlos mediante el código,

implícitamente se crea un objeto de esa clase.

Para crear una clase podemos usar la herramienta Class Builder del

banco de trabajo (Workbench).

Interfaces:

Las interfaces no pueden incluir ni pantallas ni bloques. Son tan sólo

una declaración de clase que puede ser implementada en cualquier

otra clase (local o global). Se declaran mediante la instrucción

INTERFACE-POOL y se crean mediante el Class Builder del

Workbench.

Subrutinas:

Las subrutinas se crean en el editor de código ABAP y se declaran

mediante la instrucción PROGRAM. Los pools de subrutinas no pueden

incluir pantallas (tan sólo subrutinas).

Includes:

Los programas include no son ejecutables (no ocupan espacio en la

memoria). Tan sólo son instrucciones que sirven para cargar librerías

de código ABAP. Estas librerías se pueden llamar desde cualquier

programa ABAP mediante la instrucción INCLUDE.

Los includes están más pensados para agrupar variables o bloques

del mismo tipo en un solo grupo.

Tipos.

Los pools de tipos se crean en el Diccionario ABAP y se declaran con

la instrucción TYPE-POOL. No pueden incluir ni pantallas ni bloques de

procesado. Tan solo son contenedores de tipos de datos globales para

usar en cualquier aplicación ABAP.

LA PROGRAMACIÓN DE DIÁLOGOS

Al estar SAP dividido en tres capas, el control va pasando de una

capa a otra. Si se está ejecutando una pantalla el control lo tiene el

procesador de pantallas. Cuando los datos introducidos por el usuario

son procesados por la aplicación ABAP el control pasa al procesador

de ABAP.

El proceso es el siguiente:

Page 10: SAP: La programación ABAP

La programación en SAP

Alejandro Torrijos Página 10

1. El dispatcher recibe del usuario una petición de ejecutar un

diálogo y dirige esta petición a un proceso que esté libre. El

proceso enlaza el diálogo con su contexto (almacenado en la

memoria compartida) antes de ejecutarlo. A continuación se

libera el proceso.

2. El dispatcher recibe una nueva petición y de otro usuario y

repite el proceso anterior.

Un programa puede tener varios diálogos y cada uno es

independiente del resto. El dispatcher intenta asignar siempre el

mismo proceso a una aplicación con distintos diálogos.

Dispatching:

Un proceso sólo puede hacer cambios en una única base de datos

lógica o LUW (Logical Unit of Work). Es decir los contenidos de la

base de datos deben ser consistentes de principio a fin de la

operación.

Para indicar que ya no es necesaria esta consistencia el proceso debe

terminar con un DATABASE COMMIT. Es decir, durante el tiempo en

que dura la edición de una base de datos ésta se cierra (locking).

También se debe restaurar la base de datos en caso en que el

proceso termine en un error (rollback).

Dado que distintos procesos pueden estar trabajando con la misma

base de datos a un tiempo se deben implementar mecanismos que

aseguren la consistencia de la base de datos. Por eso un proceso abre

un LUW para cada diálogo. Al final del diálogo el proceso manda una

instrucción COMMIT para ejecutar los cambios en la base de datos.

Esta instrucción es implícita puesto que no hay que escribirla en la

aplicación.

Esto implica que la base de datos tan sólo puede estar abierta

(cerrada al resto de los usuarios) durante un máximo de un diálogo

(dialogue step). Si una actualización de una base de datos se basa en

más de un diálogo estos deben de ejecutarse juntos. Esto se hace en

una sección de la aplicación llamada un SAP LUW.

Page 11: SAP: La programación ABAP

La programación en SAP

Alejandro Torrijos Página 11

LAS APLICACIONES ABAP

Los programas ABAP se almacenan en el Repository, es decir en la

memoria compartida. Para su mantenimiento se usa el editor de

código ABAP que hay en el Workbench.

El editor de ABAP:

Para abrir el editor de código hay tres posibilidades:

Desde el navegador (Object Navigator): Tecleando la

transacción SE80 y buscando el objeto dentro de Repository.

Desde el menú, desplegando la opción TOOLS – ABAP

WORKBENCH – DEVELOPMENT – ABAP EDITOR, o bien

tecleando la transacción SE38.

Haciendo dos veces click sobre el objeto del Repository, lo que

se llama FORWARD NAVIGATION.

El nombre de los programas:

Tienen hasta un máximo de treinta caracteres. No se pueden usar

puntos, comas, espacios, paréntesis, apóstrofes, comillas, signo

igual, acentos, porcentaje o asteriscos.

Atributos de un programa ABAP:

El atributo más importante es el tipo (type), que determina como se

va a ejecutar un programa. Podemos obtener una lista de todos los

tipos posibles con F4. Un programa debe estar asignado a una

aplicación y a una base de datos lógica.

Título (title): Incluye el título y una descripción del programa.

Mainteinance language: Se rellena automáticamente con el

logon lenguaje. Se puede cambiar.

Type: El tipo de programa puede ser ejecutable, módulo,

subrutina o include.

Status: Por ejemplo ‘test’.

Application: Por ejemplo ‘FINANCIAL ACCOUNTING’.

Authoritation group: La autorización incluye bien S_DEVELOP

(desarrollo y ejecución), bien S_PROGRAM (mantenimiento), o

los dos.

Package: Todos los objetos asignados a un mismo paquete se

agrupan en una única orden de transporte. Si un objeto se

asigna al paquete $TMP son privados (locales) y no se pueden

transportar a otros sistemas. Una vez asignado un objeto a un

package ya no se puede cambiar.

Page 12: SAP: La programación ABAP

La programación en SAP

Alejandro Torrijos Página 12

Logical Database: La base de datos de donde el programa

ejecutable leerá los datos.

Selection Screen Version: Si no se asigna otra el sistema utiliza

la base de datos lógica para crear una pantalla por defecto.

Para asignar otra debemos introducir el número de la pantalla

(menor de 1000) y debe estar relacionado con la misma base

de datos lógica.

Editor lock: Impide que otros usuarios puedan modificar o

borrar este programa.

Fixed point arithmetic: El sistema redondea los campos de tipo

P al número de decimales declarado. Los decimales se separan

siempre con un punto de la parte entera. Es recomendable que

esta opción esté siempre asignada a un programa.

Start using variant: Rellena los campos de una pantalla con los

valores prefijados.

La estructura de un programa ABAP:

La secuencia lógica de los distintos bloques es tan sólo recomendada

por razones de claridad ya que los bloques son independientes unos

de otros.

1. La frase introductoria, normalmente REPORT y el nombre del

programa. En el caso de módulos o subrutinas comienza con la

palabra PROGRAM y el nombre del programa.

2. Declaración de datos (DATA). Incluye las pantallas de selección

(selection screens), clases locales, interfaces y clases globales.

3. Lógica: La lógica del programa son los diferentes bloques con

sus correspondientes instrucciones en cada bloque.

4. Subrutinas: son los procedimientos internos.