✒️ABAP La ejecución de fondo
ABAP La ejecución de fondo
EJECUCIÓN DE FONDO O PROCESO BATCH:
existen dos formas de ejecutar un programa en ABAP : ONLINE y BATCH. Online el programa se ejecuta al momento de presionar F8 y los resultados de la ejecución se producen de manera inmediata . Esta forma es conveniente para programas donde se requiere la interaccion con el usuario o cuando el tiempo de ejecución es corto.
en otros casos el tiempo de procesamiento de programa podríaser muy alto. Esto puede deberse a que el programa tienen muchos accesos a bases de datos con millones de registros, multiples transacciones, etc.para estos casos es conveniente la ejecución por BATCH o de Fondo.
AUDIO:
Es muy importante analizar previamente a la realizacion de la programación de un requerimiento en ABAP si el programa que debemos realizar se ejecutará en forma online o de fondo (batch) ya que no solo cambiara la forma de ejecucion del programa sino tambien la forma en la que se programa dicho programa. Por ejemplo en ABAP se usa el Batch Input, es decir, una tecnica muy usada para realizar la carga masiva de datos en el sistema.
Si la ejecucion se va a realizar de fondo entonces las sentencias que se usaran no son las mismas que las que se usan para ejecutar el mismo proceso en forma online, otro ejemplo son los reportes en ABAP, si nos piden un reporte que se ejecutara de fondo entonces no tendra sentido usar tecnicas de reporte con la ALV que le brinda al usuario interactuar con herramientas en los distintos listados ya que no podra interactuar con ellas y la programacion cambiara totalmente.
ejemplo
Suponemos que creamos un programa ZPRUEBA_FONDO_B que obtiene los registros de la tabla ZTABLA_USUARIOS y los imprime por pantalla.
este seria el codigo fuente del programa
DATA: ti_usuarios TYPE STANDARD TABLE ztabla_usuarios,
st_usuarios LIKE LINE OF ti_usuarios.
START-OF-SELECTION
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 otro programam padre Z_PRUEBA_FONDO el cual ejecutará el programa ZPRUEBA_FONDO_B.
Lo 1ero que debemos hacer es crear un JOB, le asignamos la variable v_JOBNAME y luego ejecutamos la Funcion standard JOB OPEN. Para Modulizar creamos la subrutina ABRIR_JOB que tendrá el código de esta manera:
FORM abrir_job .
* asignamos un nombre al job
CONCATENATE 'ZPRUEBA_FONDO ' sy-dataum
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 TYOE 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 eso se crea 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 clausula VIA JOB NUMBER
En la sentenca SUBMIT se pueden pasar parámetros al programa llamado, los cuales deben existir en la pantalla de selección de este.
* FORm lanzar job
FORM LANZAR_JOB.
* Lanzo el job
SUBMIT zprueba_fondo_b
VIA JOB v_jobname
NUMBER v_jobcount
AND RETURN.
ENDFORM. " Lanzar JOB
Con el agregado del 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 Funcion Standar de ABAp JOB CLOSE , creamos la subrutina CERRAR_JOB
* FORm cierro job
FORM cerrar_job.
CALL FUNCTION ´ JOB CLOSE'
EXPORTING
jobcount = v_jobcount
jobname = v_jobname
strtimmed = 'X' "comienza de inmediato
EXCEPTIONS
cant_start_inmediate = 1
invalid_stardate = 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 lanzó el JOb, para visualizarlo ir a la TRx SM37'.
ENDIF.
ENDFORM. " Cerrar JOB
POR ÚLTIMO , Despues de cerrar el JOb ,se imprime por pantalla el mensaje " Se lanzó el job, visualizarlo ir a la TRx SM37"
Ahora se ejecuta ONLINE el programa zprueba_fondo presionando F8. y saldrá el mensaje ye iremos a la TRx SM37
SM37 = Trx Standar para visualizar los jobs procesados en el Sistema SAP.
de cada JOB podemos ver el ID, el usuario que lo ejecutó, el status(planeado, liberado, listo,activo,termnado o cancelado) , la fecha, hora de inicio, duración y el retraso.
Identificamos nuestro job y tildamos el botón SPOOL tildamos de nuevo el job y lo visualizamos.
Los pasos para hacer ejecutar un batch seria:
Pgm padre con subrutinas de :
Subrutina con Función abrir job (JOB_OPEN)
Subrutina: lanzar job a traves de SUBMIT con el programa a recuperar datos que necesitamos , ej, la estructura de usuarios
Subrutina con Función cerrar job (JOB_CLOSE)
Consultar con SM37 el job submitido
AUDIO:
En los casos en que nos pidan un programa ABAP que se ejecute tanto en forma online como de fondo, la mejor solución será desarrollar un único programa ABAP que presente en la pantalla de selección la posibilidad de elegir el modo de procesamiento, para esto colocaremos dos radio buttons, uno para ejecución online y otro para ejecución de fondo y le permitiremos al usuario del programa que elija el modo de procesamiento según sus necesidades.
 
 
 
Sobre el autor
Publicación académica de Carlos Alberto Carreira, en su ámbito de estudios para la Carrera Consultor ABAP.
Carlos Alberto Carreira
Profesión: Consultor Técnico en Jde W.s. - Argentina - Legajo: KC15G
✒️Autor de: 92 Publicaciones Académicas
🎓Cursando Actualmente: Consultor ABAP Nivel Inicial
🎓Egresado de los módulos:
Certificación Académica de Carlos Carreira