✒️ABAP La ejecución de fondo
ABAP La ejecución de fondo
EJECUCIÓN DE FONDO.
Existen dos formas de ejecutar un programa en ABAP: Online y Batch. En la ejecución Online el programa se ejecuta al momento de presionar F8 y los resultados de la ejecución se producen de manera inmediata. Esta forma de ejecución es conveniente para los programas donde se requiere interacción con el usuario o cuando el tiempo de ejecución es muy poco.
Pero en ciertos otros casos, especialmente hablando en un ambiente real de trabajo, el tiempo de procesamiento de un programa podría ser muy alto. Esto se puede deber a que el programa tiene muchos accesos a basede datos, que tienen millones de registros, a la ejecución de multiples transacciones o a otras varias razones.
Para estos casos es conveniente la ejecución Batch o de fondo. Veamos un ejemplo paso a paso de como ejecutar un programa de fondo.
NOTA: Es sumamente importante establecer como se va a ejecutar un programa: ONLINE o BATCH, dado que cambia la forma de Ejecucion y de Programacion del programa. Por ejemplo si se utiliza la técnica BATCH INPUT que es una técnica usada para cargar masivamente los datos en el sistema, se hara con unas instrucciones cuando es BATCH y con otras muy diferentes cuando es ONLINE. Otro ejemplo es cuando se hacen REPORTES, cuando se va a ejecutar en BATCH no es lógico usar reportes con la técnica ALV (que permiten interactuar al usuario, al momento de generar el reporte). Por lo tanto se debe analizar para que se necesita el reporte puesto que puede ser muy costoso darnos cuenta al final de como era realmente que se requeria (ONLINE o BATCH).
Ejemplo, supongamos que tenemos el programa ABAP ZPRUEBA_FONDO_B que obtiene los registros de la tabla ZTABLA_USUARIOS y los imprime por pantalla.
* Declaración de datos
DATA: ti_usuarios TYPE STANDARD TABLE OF ztabla_usuarios,
st_usuarios LIKE LINE OF ti_usuarios.
*---------------------------------------------------------------------*
START-OF-SELECTION.
*---------------------------------------------------------------------*
CLEAR ti_usuarios.
REFRESH ti_usuarios.
SELECT dni nombre_ape estado_usu
FROM ztabla_usuarios
INTO TABLE ti_usuarios.
LOOP AT ti_usuarios INTO st_usuarios.
WRITE:/ st_usuarios-dni,
st_usuarios-nombre_ape,
st_usuarios-estado_usu.
ENDLOOP.
Ahora crearemos un programa ABAP ZPRUEBA_FONDO el cual cumplirá el rol de programa padre del programa ZPRUEBA_FONDO_B.
Lo primero que debemos hacer es crear un JOB. Para esto le asignamos un nombre a la variable V_JOBNAME y luego ejecutamos la función JOB_OPEN. Para modularizar vamos a crear la subrutina ABRIR_JOB y ahi ingresamos nuestro código.
*&---------------------------------------------------------------------*
*& Form abrir_job
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM abrir_job .
* Asigamos un nombre al job
CONCATENATE 'ZPRUEBA_FONDO_' sy-datum
INTO v_jobname.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = v_jobname
IMPORTING
jobcount = v_jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " abrir_job
Lo que sigue es lanzar el Job. Para esto vamos a crear la subrutina LANZAR_JOB, que ejecutará la sentencia SUBMIT, la cual se utiliza para ejecutar un programa dentro de otro programa y con el agregado de la cláusula VIA JOB NUMBER la ejecución del programa se realizará de fondo.
*&---------------------------------------------------------------------*
*& Form lanzar_job
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form lanzar_job.
* Lanzo el Job
SUBMIT zprueba_fondo_b
USER sy-uname "usuario que ejecuta
VIA JOB v_jobname
NUMBER v_jobcount
AND RETURN.
endform. " lanzar_job
NOTA: Mediante la sentencia SUBMIT se pueden pasar parámetros al programa llamado, los cuales deben existir en la pantalla de selección de éste.
Con el agregado de la cláusula AND RETURN el programa llamador permanece en espera mientras se ejecuta el programa llamado. Cuando el programa llamado termina, se devuelve el control al programa llamador.
Luego debemos cerrar el JOB mediante la función JOB_CLOSE. Para esto vamos a crear la subrutina CERRAR_JOB.
*&---------------------------------------------------------------------*
*& Form cerrar_job
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM cerrar_job.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = v_jobcount
jobname = v_jobname
strtimmed = 'X' "Comienza de inmediato
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
invalid_target = 8
OTHERS = 9.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
WRITE 'Se lanzo el Job, para visualizarlo ir a la Trx SM37'.
ENDIF.
ENDFORM. " cerrar_job
Por último, después de cerrar el JOB, imprimimos por pantalla el mensaje "Se lanzó el Job, para visualizarlo ir a la Transaccion SM37".
Ahora vamos a ejecutar Online el programa ZPRUEBA_FONDO presionando F8. Veremos en la pantalla el mensaje "Se lanzó el Job, para visualizarlo ir a la Trx SM37", por lo tanto vamos a ir a buscar el resultado a la transacción SM37. Allí presionamos F8 o Ejecutar.
NOTA: Utilizaremos la TRANSACCIÓN SM37 para visualizar los jobs procesados en el sistema SAP. De cada job podremos visualizar distintos datos tales como el ID, el usuario SAP que lo ejecutó, el status (planeado, liberado, listo, activo, terminado o cancelado), la fecha y hora de inicio, la duración y el retraso.
AUDIO: Dado que nos pueden solicitar un programa ABAP que se ejecute tanto ONLINE como BACTCH o DE FONDO, Ante esto debemos hacer una programa ABAP en donde el usuario elija la forma de ejecución del programa, ya sea Online o de Fondo.
 
 
 
Sobre el autor
Publicación académica de Alexander Castellanos, en su ámbito de estudios para la Carrera Consultor ABAP.
Alexander Castellanos
Profesión: Ingeniero de Sistemas - Colombia - Legajo: JS42A
✒️Autor de: 67 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Alexander Castellanos