✒️ABAP La ejecución de fondo
ABAP La ejecución de fondo
EJECUCIÓN DE FONDO
Existen dos formas de ejecutar los programas ABAP: online y Batch. En la primera 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 en donde se requiere que la interacción con el usuario sea en ese mismo momento.
Sin embargo puede suceder que el procesamiento del programa no se pueda llevar a cabo en el mismo momento, ya que el programa puede tener accesos a múltiples bases de datos con mucha información, etc. Para estos casos es conveniente ejecutar el programa de fondo o batch.
IMPORTANTE: Antes de comenzar con la programación de un requerimiento en ABAP es importante determinar si este se ejecutará online o es mejor hacerlo de fondo. Esta decisión es importante porque determina no solamente el tiempo en que se ejecuta el programa sino en la forma en que se va a realizar la programación.
Por ejemplo, en ABAP se utiliza el Batch Input, técnica utilizada para realizar la carga masiva de datos en el sistema. Si se va a ejecutar un programa de fondo las sentencias que se utilizan son totalmente distintas a las que se usarían para ejecutar un programa de forma online.
Otro ejemplo sería si se solicita la creación de un programa de fondo o batch entonces se tiene que tener en cuenta que no tiene caso implementar técnicas de programación como el ALV, las cuales les permiten a los usuarios interactuar con herramientas en los distintos listados. Es recomendable dedicar todo el tiempo necesario al análisis previo al desarrollo de un programa ya que una corrección en la etapa de diseño es muchísimo menos costosa que una corrección luego de realizado y probado el requerimiento.
Ejemplo de ejecución de fondo:
1 Se tiene el programa ZPRUEBA_FONDO_B que obtiene los registros de la tabla ZTABLA_USUARIOS y los imprime por pantalla.
DATA: ti_usuarios TYPE STANDAR TABLE OF 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.
2. Ahora, lo que vamos a crear un programa que se llamará ZPRUEBA_FONDO, el cual servirá de programa padre del programa ZPRUEBA_FONDO_B. Lo primero que se tiene que hacer es crear un Job, esto se hace asignando un nombre a la variable v_jobname y luego ejcutamos la función JOB_OPEN. Para modularizar vamos a crear la subrutina ABRIR_JOB que tendrá el siguiente código.
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
3 Lanzar el Job: Se crea la subrutina LANZAR_JOB, que ejecutará la sentencia SUBMIT, la cual se utiliza para ejecutar un programa dentro de otro programa. Con el agregado VIA JOB NUMER la ejecución del programa se realizará de fondo.
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
AND RETURN El programa llamador permanece en espera mientras se ejecuta el programa llamado, cuando este termina le devuelve el control al programa llamador.
4 CERRAR JOB: Se hace mediante la función JOB_CLOSE. Creamos la subrutina CERRAR_JOB como vemos a continuación:
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
Ahora lo que procede es imprimir por pantalla el mensaje “Se lanzó el Job, para visualizarlo ir a la transacción SM37”. Nosotros vamos a la transacción y presionamos Ejecutar.
Identificamos el proceso o el Job que procesamos y presionamos el botón SPOOL. Y Se presenta el pedido del Job correspondiente a nuestro programa.
Si presionamos el botón visualizar vemos el resultado del procesamiento.
 
 
 
Sobre el autor
Publicación académica de Jose Alberto Rivera Gonzalez, en su ámbito de estudios para la Carrera Consultor ABAP.
Jose Alberto Rivera Gonzalez
Profesión: Técnico Informático - Mexico - Legajo: LG32F
✒️Autor de: 102 Publicaciones Académicas
🎓Egresado de los módulos:
Certificación Académica de Jose Rivera