Control interno del flujo de un programa 1-14

Anuncio
Control interno del flujo de un programa
1-14
Lección 1
Tipos de eventos
Eventos en programas ejecutables
Un report es un programa que realiza las siguientes fases:
•
Recogida de parámetros (si los hay) mediante la pantalla de selección.
•
Ejecución del programa en sí.
•
Presentación de los datos obtenidos en la fase de proceso mediante el
listado.
INITIALIZATION
En este evento sé inicializarían todas las variables de los programas (o al menos
aquellas que su ámbito de utilización sea en todo el programa).
START-OF-SELECTION
Este evento se lanza cuando se procesa la instrucción REPORT.. En ese momento se
empieza a ejecutar el código que se encuentra entre REPORT y la palabra STARTOF-SELECTION.
Inmediatamente después se procesa el bloque contenido dentro de este evento.
Se utiliza cuando hay una selección de datos. Se utiliza siempre, cuando queremos
Control interno del flujo de un programa
2-14
cargar los datos, desde una tabla o fichero, para después utilizarlo en el programa.
END-OF-SELECTION
El código asociado a este evento se procesa cuando se termina la selección de
datos de tablas o bases de datos lógicas.
Se puede forzar por código la interrupción de la selección de datos con la
instrucción STOP. Si en nuestro código se procesa esta instrucción no se leerán más
entradas y se procesará inmediatamente el código correspondiente al evento ENDOF-SELECTION.
Otra alternativa es usar la instrucción EXIT, que cancela el procesamiento del
report y muestra la lista.
TOP-OF-PAGE
Este evento se procesa antes de que el primer dato salga en cada página. Se suele
usar para poner el título a las páginas o cabeceras, en combinación con la opción de
la sentencia REPORT ...NO STANDARD PAGE HEADING.
Si añadimos la opción ...DURING LINE-SELECTION se ejecutará sólo en listas
secundarias que eventualmente se generen como consecuencia de una acción en el
Report actual.
END-OF-PAGE
Este evento se lanza cuando se crea automáticamente una nueva página. Esto
ocurrirá cuando el número de líneas procesado sobrepase el número de líneas fijado
para la página en la sentencia REPORT, o cuando la sentencia RESERVE n LINES.
Después de esta sentencia “RESERVE” se forzará nueva página si en la misma no
hay al menos n líneas libres. ‘n’ puede ser una variable o una constante literal.
No se procesará END-OF-PAGE si se refuerza nueva página por código (NEWPAGE).
AT LINE-SELECTION
A partir de la selección de una línea de pantalla (haciendo doble clic) se
desencadenan una serie de eventos.
Control interno del flujo de un programa
3-14
Nota:
La palabra clave REPORT indica el inicio del mismo. Puede tener los siguientes
añadidos:
No standard page heading Suprime la cabecera estándar en el
listado.
Line-size <col> Crea un listado con <col> columnas por fila.
Line-count n(m) Crea un listado de n líneas por página, y reserva
m líneas para el pie de página.
Message-id <mid> La clase de mensajes que se van a utilizar es
la mid.
Ejemplo:
El programa muestra un ejemplo de bloques de eventos. La pantalla de selección
contiene un valor de entrada para una fecha. El valor por defecto es la fecha actual
La adición DEFAULT a PARAMETERS asegura que el objeto de datos se llena con
el valor por defecto al principio del programa. Los valores por defecto pueden ser
literales o campos de la estructura sy. El sistema en tiempo de ejecución llena el
campo sy-datum con la fecha actual al comienzo del programa. Podemos usar el
bloque de evento INITIALIZATION para cambiar las variables en tiempo de
ejecución pero antes de que la pantalla de selección estándar se lance.
START-OF-SELECTION es un bloque de evento para la creación de listados.Todas
las declaraciones globales son reconocidas por el sistema por las palabras claves
ABAP, y, de la misma forma, un bloque de proceso lógico (independientemente de
dónde se haya situado en el programa). Las declaraciones se deben situar juntas al
principio del programa. PARAMETERS es uno de los elementos que se usan para
Control interno del flujo de un programa
4-14
hacer las declaraciones. Cuando se genera el programa, se genera también una
pantalla de selección.
El ejemplo más fácil de entender es para programas ejecutables.
El sistema ABAP en tiempo de ejecución llama a los bloques de eventos en una
secuencia designada:
Primero, se llama al bloque de evento INITIALIZATION.
Se lanza la pantalla de selección al servidor de presentación.
Después de la pantalla de selección se llama a START-OF-SELECTION.Si el evento
START-OF-SELECTION contiene un WRITE, SKIP o ULINE, se llena una buffer
de listado.Después dicho buffer se envía al servidor de presentación.
Eventos en pantallas (se verá más adelante en profundidad)
AT USER-COMMAND
Cuando hay un botón de selección y lo seleccionamos, a partir de su selección, se
desencadenan unas acciones.
AT SELECTION-SCREEN
Define la pantalla de selección, tal como se presenta al usuario. Al hacer un enter o
confirmar una pantalla de selección se ejecutan las órdenes que haya a
continuación.
Tiene las siguientes opciones:
Control interno del flujo de un programa
5-14
- Podemos hacer que cuando se pulse F4 se ejecute las instrucciones que
contenga el AT SELECTION-SCREEN. La sintaxis es la siguiente:
AT SELECTION-SCREEN ON VALUE REQUEST FOR campo.
Este “campo” suele ser un nombre de campo que se pide con la orden
PARAMETERS.
- OUTPUT -> con esta opción hacemos que se ejecute este evento antes de que
se visualice la pantalla, por ejemplo, cambiar los atributos de unprograma.
Existe dentro de la programación con dynpros la siguiente modulación:
La sentencia ABAP CALL SCREEN <nnnn> interrumpe el bloque de procesos y
llama a una pantalla. Cada pantalla tiene 2 bloques de eventos:
•
PROCESS BEFORE OUTPUT (PBO) se procesa inmediatamente antes que
la pantalla es visualizada, en este momento los “Modules” son llamados,
ellos cuidan que ciertas tareas se hagan correctamente.
•
PROCESS AFTER INPUT (PAI) se procesa inmediatamente después de
una acción del usuario. Toda la lógica del programa que tiene que ocurrir
debido a una acción del usuario tiene que estar en el PAI.
Nota: El código para los eventos PBO y PAI es escrito en el screen painter no en el
ABAP Editor.
<ABAP module name> es el más importante comando de pantallas ABAP. Llama a
un bloque de procesos especial llamado module.
Control interno del flujo de un programa
6-14
Los Modules son bloques de procesos ABAP sin interfaces, que solo pueden ser
llamados desde dentro del flujo lógico del programa. “Modules” empiezan con la
sentencia MODULE y acaban con ENDMODULE.
Subrutinas
Ver Modulación
Control interno del flujo de un programa
7-14
Lección 2
Tipos de lectura
Lectura de una tabla interna mediante un loop
Se puede leer y corregir el contenido de una tabla interna usando una declaración
LOOP. En este ejemplo, una línea se copia de la tabla interna it_flightinfo a la
estructura wa_flightinfo. Los campos de la estructura pueden entonces ser
corregidos. Se puede crear una lista de los campos usando una declaración WRITE.
Si se desea cambiar el contenido de la tabla interna, primero hay que cambiar el
valor de los campos de la estructura dentro del LOOP
y en luego sobrescribir la
línea de la tabla interna con la declaración MODIFY.
Control interno del flujo de un programa
8-14
Lectura de una tabla interna usando un índice
EJEMPLO DE SINTAXIS: LECTURA UTILIZANDO EL ÍNDICE
Dentro del LOOP, se puede restringir el acceso a ciertas líneas utilizando la
declaración FROM-TO. En el ejemplo superior, el sistema solo trabaja con las cinco
primeras líneas de la tabla.
Se puede utilizar la sentencia READ TABLE para leer un registro único. Se utiliza el
declaración INDEX para especificar el número de la línea del registro solicitado.
Lectura de una tabla interna usando clave
EJEMPLO DE SINTAXIS: LECTURA UTILIZANDO LA CLAVE
Control interno del flujo de un programa
9-14
Dentro del LOOP, se puede restringir el acceso a ciertas líneas utilizando la
declaración WHERE. En el ejemplo superior, el sistema solo trabaja con las líneas
de la tabla en las que el campo CARRID tiene valor LH.
Se puede utilizar la sentencia READ TABLE para leer una línea en concreto. En este
caso se debe asignar un valor a todos los campos clave después de la instrucción
WITH TABLE KEY. El código de retorno sy-subrc se dispone a cero si la fila
correspondiente existe en la tabla interna.
Lectura a la base de datos
Se usa del OPEN SQL la instrucción SELECT para leer los datos de la base de datos.
La instrucción SELECT utiliza una lógica compleja de acceso a datos, para permitir
el acceso a diferentes tipos de datos a la vez.
La sentencia contiene una serie de cláusulas, cada una de las cuáles tiene
diferentes tareas:
o
La sentencia SELECT especifica:
o
Si el resultado de la selección será una línea o múltiples líneas.
o
Que campos son incluidos en el resultado.
o
Si el resultado puede contener dos o mas líneas iguales.
o
La cláusula INTO especifica el objeto interno del programa en el cual
serán almacenados los datos.
La cláusula FORM especifica el origen de los datos. Éste puede ser una Tabla o una
Vista.
La cláusula WHERE especifica las condiciones que la selección debe cumplir. Esto
determina que líneas son incluidas en la tabla de resultados.
Para mas información sobre otras cláusulas, consulte la documentación de la
sentencia SELECT en el editor de ABAP.
Control interno del flujo de un programa
10-14
Lectura de registros simples
La sentencia SELECT SINGLE nos permite seleccionar un único registro de la base
de datos. Para asegurar el acceso único todos los campos clave de la base de datos
deben ser incluidos en la cláusula WHERE, a excepción del campo mandante (si
este no esta especificado se utiliza el mandante en el que se realiza la selección).
A continuación de INTO se inserta el nombre de la estructura donde se insertara la
información obtenida de la base datos.
Si se utiliza la instrucción CORRESPONDING FIELDS OF a continuación de INTO
el sistema llena sólo los componentes de la estructura con los nombres idénticos a
la base de datos.
Si el sistema encuentra una entrada a la tabla que se ajusta a las condiciones, el
valor de SY-SUBRC es igual 0.
La instrucción SINGLE informa que sólo se leerá una línea de la base de datos cada
vez.
Control interno del flujo de un programa
11-14
Lectura de varios registros usando SELECT Loop
Si no se utiliza la instrucción SINGLE en la sentencia SELECT el sistema lee
múltiples registros de la base de datos.
La lista de campos determina que
columnas se leen de la base de datos. Se debe restringir el número de líneas a leer
utilizando la cláusula
WHERE con los campos clave de la tabla o un índice
secundario.
El nombre de la tabla de la base de datos a que se accede se especifica con la
cláusula FROM.
Es posible añadir múltiples condiciones lógicas a la cláusula WHERE gracias a AND
u OR.
Control interno del flujo de un programa
12-14
Lectura de varios registros usando un Array
La instrucción INTO TABLE <itab> provoca que el sistema copie el contenido de
la tabla de la base de datos a la tabla interna itab.
El campo de control SY-SUBRC = 0 cuando el sistema ha podido leer al menos una
entrada de la tabla.
Lectura múltiple de tablas de la BBDD
Se puede tener acceso a varias tablas de la base de datos con una sola consulta,
con tal de que las tablas estén lógicamente relacionadas.
Para ello se debe conocer la información siguiente:
¿A qué tablas de la base de datos se debe acceder?
¿Cómo debe ser la condición de ligado de las tablas? En esta condición las
columnas de las tablas de la base de datos se ligan.
¿Qué columnas deben ser leídas? Si una columna aparece en más de una
tabla, se debe especificar la tabla en la que esta columna debe ser leída.
Control interno del flujo de un programa
13-14
Control interno del flujo de un programa
14-14
Descargar