✒️ABAP La ejecución de fondo
ABAP La ejecución de fondo
Background Execution
Programs can be executed in ABAP through the Program menu, either by selecting Execute or Execute in Background. There are two ways to execute a program:
- Online Execution (F8): The program runs immediately upon pressing F8 or the execute icon, producing results instantly. This method is suitable for user interaction and when program processing is minimal. (1 Minute)
- Batch Execution (F9): This involves running a process or program without user interaction. A process is launched, and control is returned even before the program finishes execution. This is used for high-processing programs. Results are not visible on the same screen but can be found in transaction SM37. (20 minutes)
When running a background program, a pop-up window for background printing parameters appears. You can modify output devices, Windows printers, etc. Upon execution, the following options are presented:
- Immediate: Starts the background program as soon as it is defined.
- Date/Time: Specifies the date and time to initiate background execution, with an option for periodic execution.
- After job: Chains the execution to start after another job finishes. It's possible to specify that the program should only run if the previous program processed correctly; otherwise, it won't continue.
- After event: Execution occurs as soon as the specified event starts, either manually or automatically. The event must be defined in table BD.
Transaction SM37
Used to view jobs processed in the SAP system. Information such as ID, executing SAP user, status (planned, released, prepared, activated, completed, or canceled), start date and time, duration, and delay can be viewed for each job.
Transaction SP01
Through the standard transaction SP01, known as "The Spool," we manage all print requests generated in the SAP system. NOTE: Programming a report differs if executed online or in the background, especially when mass loading data into the system.
Creating a Background ABAP Program
When designing and developing an ABAP program that must exclusively run in the background, the approach differs from an online execution due to requirement and system characteristics.
- The first step is to create a job. Assign a name to the variable V_JOBNAME and then execute the function module JOB_OPEN. To modularize, create the subroutine JOB_CREATION.
- Next, launch the job. Create the subroutine JOB_EXECUTION, executing the SUBMIT statement. This statement is used to run a program within another program, and with the VIA JOB NUMBER clause, the program runs in the background.
- Using the SUBMIT statement, parameters can be passed to the called program, which must exist on its selection screen.
- With the AND RETURN clause in the SUBMIT statement, the calling program remains in wait while the called program executes. Once the called program finishes, control is returned to the calling program.
- Finally, close the job using the function module JOB_CLOSE. Create the subroutine JOB_END and display the message "Job launched, go to transaction SM37 to view."
Transaction SM36
A job can be created and scheduled with SM36 manually. Steps and configuration can be configured with GUI. Reference: https://www.youtube.com/watch?v=AyFESMyj7O8
E.g
Worker - Actual Logic to be executed
*&---------------------------------------------------------------------*
*& Report ZTEST_ABAP_JEGA_13_JOB
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest_abap_jega_13_job.
* Declaration of Structure
DATA: it_users TYPE STANDARD TABLE OF zuser_table_jega,
wa_users LIKE LINE OF it_users.
*---------------------------------------------------------------------*
START-OF-SELECTION.
*---------------------------------------------------------------------*
CLEAR it_users.
REFRESH it_users.
SELECT *
FROM zuser_table_jega
INTO TABLE it_users.
LOOP AT it_users INTO wa_users.
* Content of the Users Table
WRITE:/1(1) sy-vline,
2(8) wa_users-dni,
11 sy-vline,
12(30) wa_users-nombre_ape,
43 sy-vline,
44(20) wa_users-estado,
65 sy-vline,
97(20) wa_users-birthdate,
133 sy-vline.
ENDLOOP.
Job Scheduler - Calling the main logic
*&---------------------------------------------------------------------*
*& Report ZTEST_ABAP_JEGA_13
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest_abap_jega_13.
* Data declaration
DATA: v_jobname TYPE btcjob,
v_jobcount TYPE btcjobcnt.
*----------------------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------------------*
* Job schedule
PERFORM job_creation.
* Job execution
PERFORM job_execution.
* Job end
PERFORM job_end.
************************************************************************
********************* SUBROUTINES ***************************************
************************************************************************
*&---------------------------------------------------------------------*
*& Form job_creation
*&---------------------------------------------------------------------*
FORM job_creation.
* Assign job name
CONCATENATE 'ZTEST_JEGA_JOB_' 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 NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form job_execution
*&---------------------------------------------------------------------*
FORM job_execution.
* Launch the worker program Via de new JOB
SUBMIT ztest_abap_jega_13_job
USER sy-uname " Current user - job activarion
VIA JOB v_jobname
NUMBER v_jobcount
AND RETURN.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form job_end
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM job_end.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = v_jobcount
jobname = v_jobname
strtimmed = 'X' "Starts immediately
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 NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
* If Job was launched, view trought SM37
MESSAGE s000(zclase_test_b) WITH TEXT-001 TEXT-002.
ENDIF.
ENDFORM.
 
 
 
Sobre el autor
Publicación académica de Jaime Eduardo Gomez Arango, en su ámbito de estudios para la Carrera Consultor ABAP.
Jaime Eduardo Gomez Arango
Profesión: Ingeniero de Sistemas y Computaci?n - Espa?a - Legajo: SW34C
✒️Autor de: 149 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor en SAP Fiori
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
Disponibilidad Laboral: FullTime
Presentación:
Ingeniero de sistemas y computaci?n con 8 a?os de experiencia el desarrollo frontend & backend (react/node) y en cloud (aws), actualmente desarrollando habilidades en sap btp, ui5, abap y fiori.
Certificación Académica de Jaime Gomez