
BATCH.
Ejecución de fondo.
Existen dos formas de ejecutar un programa en ABAP uno es ONLINE y BACTH.
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. Se usa cuando los programas requieren interacción con el usuario o cuando el tiempo de ejecución es muy corto. En un ambiente real el tiempo de procesamiento podría ser muy alto esto puede deberse a que tiene muchos accesos a la base de datos, que tienen millones de registros, ejecuciones de múltiples transacciones. Por esta razón es conveniente usar BATCH o de fondo.
Abap ZPRUEBA_FONDO_B obtiene registros de la ZTABLA_USUARIOS y los imprime en plantalla.
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 CORRESPONDING FIELDS OF TABLE ti_usuarios.
LOOP AT ti_usuarios INTO st_usuarios.
WRITE:/ st_usuarios-dni,
st_usuarios-nombre_ape,
st_usuarios-estado_usu.
ENDLOOP.
Despúes creamos un nuevo programa ABAP ZPRUEBA_FONDO lo cual cumplirá el rol del programa ZPUERBA_FONDO_B. Lo primero que se debe crear en un JOB, así le asignamos un nombre a la variable V_JOBNAME y luego la función JOB_OPEN. Para modularizar y cremos una subrutina ABRIR_JOB.
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 creamos una subrutina LANZAR_JOB que ejecutará la sentencia SUBMIT ( se pueden pasar parámentros al programa llamado, los cuales deben existir en la pantalla de selección de éste). se utiliza para ejecutar un programa dentro de otro con el agregado de la claúsula VIA JBO NUMBER. esta ejecución 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
Con el agregado de la claúsula AND RETURN el programa permanece en espera mientras se ejecuta el programa llamado, cuando el mismo termina se devuelve el control al programa llamador.
Luego cerramos la función mediante la función JOB_CLOSE, creamos la subrutina CERRAR_JOB.
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
Después de cerrar el JOB imprimimos por pantalla. "se lanzo el job, para visualizarlo ir a la TRX SM 37"
Para ejecutar ONLINE el programa ZPRUEBA_FONDO presionamos F8 y veremos en pantalla el mensaje " Se lanzo el Job, para visualizarlos SM37.
SM37: es para visualizar los jobs procesados del sistema SAP, podremos visualizar tales como ID, usuario SAP que lo ejecutó, el status (planeado, liberado, listo, activo, terminado o cancelado) la fecha y hora de inicio, duración y el retraso.
Para identificar nuestro proceso , lo tildamos y presionamos el SPOOL, ahora veremos el pedido correspondiente a nuestro programa. Y finalmente presionamos el botón de visualización y veremos el resultado del procesamiento.