Para ejecutar un programa en proceso de fondo, es decir en un job, puedes usar estos módulos de funciones:
Primero se crea un job nuevo, le pasas un nombre cualquiera para identificarlo y el te devuelve en el parametro jobcount el id interno del job que vas a necesitar.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = lv_jobname "Este es el nombre del job
IMPORTING
jobcount = lv_jobcount "ID interno
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
Puedes ejecutar el programa que quieras por medio de la sentencia SUBMIT junto con el nombre del job y su id.
SUBMIT <NOMBRE_DEL_PROGRAMA> AND RETURN
WITH <PARAMETROS...>
USER sy-uname
VIA JOB lv_jobname NUMBER lv_jobcount.
Con esto ya esta preparada la ejecucion del job, ahora falta que se ejecute. Esto se hace con la siguiente sentencia:
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = lv_jobcount
jobname = lv_jobname
strtimmed = 'X'
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.
El parametro strtimmed = 'X' hace que se ejecute el job inmediatamente. Si es necesario colocar una fecha u hora, puedes revisar el resto de los parametros por la SE37.
Ahora, a que te refieres con ejecutarlo como dialogo? Tienes que ejecutar el programa por dialogo Y de fondo? Las transacciones de Dialogo son ejecuciones de una secuencia de pantallas o dynpros... no se si el SUBMIT funcione de esa forma...
|