GENERACIÓN DINÁMICA DE PROGRAMAS
|
11.1. CREACiÓN, MODIFICACIÓN Y LECTURA DE UN PROGRAMA:Se puede generar y modificar un programa dinámicamente, es decir, en tiempo de ejecución (de otro programa, que será el que ‘cree’ o modifique el nuevo). Sentencias relacionadas:
- INSERT REPORT programa FROM tabla.
Esta sentencia permite la creación dinámica de un programa (se puede dar su nombre con un literal o usando una variable). Para ello debe usarse una tabla interna que contendrá el código del programa a generar. Cada entrada de esta tabla debe tener un solo campo, de 72 caracteres. En cada una se guardará una línea de programa. Si el programa que se especifica ya existiera, será modificadodinámicamente. El contenido de la tabla machacará completam. al programa antiguo.
- Características del nuevo programa a generar: Clase de desarrollo (la misma que la del programa generador), título (sin título), tipo (1: reports), aplicación (‘S’: sistema básico).
Ejemplo:
DATA: tabla(72) OCCURS 0. APPEND 'REPORT ZF000001.' TO tabla. APPEND 'WRITE / "hola"' TO tabla. "dentro de APPEND hay que duplicar las comillas INSERT REPORT 'ZF000001' FROM tabla. "creación del nuevo programa
- READ REPORT programa INTO tabla.
Lee el programa especificado y lo guarda en la tabla dada. Luego ésta puede imprimirse o procesarse normalmente con una sentencia LOOP AT tabla. Es muy útil para modificar de forma dinámica el programa, cambiando alguna entrada de ella y luego haciendo un INSERT REPORT.11.2. CREACiÓN DE SUBRUTINAS TEMPORALES:
- GENERATE SUBROUTINE POOL tabla NAME programa MESSAGE mensajeINCLUDE include LINE línea WORD palabra OFFSET offset TRACE-FILE var.
Esta sentencia permite crear una subrutina en la memoria principal, de forma temporal, en lugar de almacenarla en SAP. El pool de subrutinas sólo existe durante la ejecución del programa que lo generó. Se pueden crear por programa hasta 36 subrutinas en el pool. Si ocurre algún error durante la generación, el campo del sistema SY-SUBRC contendrá 8, y 0 en otro caso.
- Parámetros: Salvo ‘tabla’ y ‘programa’, el resto de variables son de salida. MESSAGE contiene el mensaje de error, si hay error de sintaxis. INCLUDE contiene el nombre del programa include donde el error ha ocurrido. LINE dice el número de línea errónea. WORD contiene la palabra clave de la sentencia errónea. OFFSET guarda el offset de la palabra con error. Con el campo TRACE-FILE se activa el modo trace, y se deja la traza del programa en ‘var’.