#1
|
|||
|
|||
ejecutar programa en fondo
Hola, tengo un reporte que muestra un ALV y tagregue un boton para generar un TXT, el cual muestra el usuario una ventana del explorador y lo guarda local.
El problema es que las consultas son pesadas y me pidieron que agregara un checkBox en la pantalla principal para que el programa se ejecute en fondo y no tenga al usuario en la pantalla esperando la consulta y despues presionar el boton generar TXT, el proceso de fondo genera el archivo TXT en el servidor de aplicaciones. ya tengo eso intente ejecutar la funcion OPEN_JOB antes de los select validando que se haya seleccionado el checkBox y un CLOSE_JOB cuando se termine de guardar en el servidor de aplicaciones. (con todas las validaciones y ejecucion en automatico con el perform que guarda el archivo, y ya no mostrarse el ALV). la estructura que encontre del llamado de las funciones son: CALL OPEN_JOB SUBMIT ZPROGRAM via JOB. CALL CLOSE_JOB. en este caso el Submit no lo uso puesto que ya estoy en mi programa y se sustituye por el proceso de seleccion de la informacion. Ahora lo que aun no entiendo es como debe ser para que despues del CALL OPEN_JOB continue el demas proceso en fondo. ya que lo ejecuto y me tengo que esperar aun asi en pantalla hasta que el flujo del programa llegue al CLOSE_JOB. Una solucion que se me viene de pronto seria re llamar mi programa usando el submit y mediante la variable SY-BATCH sepa como se esta ejecutando pero aun asi tendria que buscar la forma de simular que el usuario oprime el boton de generar archivo TXT. Necesito ayuda. Saludos.
__________________
Francisco Ramirez. consultor SAP ABAP Netweaver Queretaro, Mexico. |
#2
|
|||
|
|||
hola
Hola,
para esas funciones, tenes que crear otro programa con la lógica que necesitas que se corra de fondo, no la podes dejar en un form, si no que tiene que ir en un programa aparte, pasandole datos como parametro. Si tenes que pasar una tabla, podes usar IMPORT / EXPORT. o bien hacer la seleccion de datos dentro del programa que corre de fondo, que a la vez te hace mas veloz el programa original. Quedaria algo asi: CALL FUNCTION 'JOB_OPEN' EXPORTING jobname = 'NOMBRE_JOB' IMPORTING jobcount = 'VARIABLE_JOBCOUNT' EXCEPTIONS OTHERS = 1. SUBMIT 'TU_NUEVO_PROGRAMA' WITH 'LOS PARAMETROS' (por ejemplo al programa le podes hacer parametros tales como la ruta, el nombre del archivo, etc) AND RETURN VIA JOB lv_jobname NUMBER lv_jobcount. * Se cierra el job CALL FUNCTION 'JOB_CLOSE' EXPORTING jobcount = lv_jobcount jobname = lv_jobname strtimmed = lv_strtimmed IMPORTING job_was_released = lv_rele 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.
__________________
Sebas Desarrollador ABAP. |
#3
|
|||
|
|||
Gracias por la ayuda intente algo loco usando un rellamado al programa via job pero no me funciono ya que no entraba al evento start of selection creo que me falta un skip first screen o algo asi.
Termine creando el programa solo de construccion del archivo y llamado con el Job como me lo sugeriste sebas. Saludos.
__________________
Francisco Ramirez. consultor SAP ABAP Netweaver Queretaro, Mexico. |
#4
|
|||
|
|||
Si puedes generar el job dentro del mismo report
Si el programa se envía de fondo adiciona una condicional
IF sy-batch EQ 'X'. PERFORM get_job_details. ENDIF. Declaras las varibles necesarias. * Job Runtime Parameters DATA: gd_eventid LIKE tbtcm-eventid, gd_eventparm LIKE tbtcm-eventparm, gd_external_program_active LIKE tbtcm-xpgactive, gd_jobcount LIKE tbtcm-jobcount, gd_jobname LIKE tbtcm-jobname, gd_stepcount LIKE tbtcm-stepcount, gd_error TYPE sy-subrc, gd_reciever TYPE sy-subrc. *---------------------------------------------------------------------* * FORM get_job_details * *---------------------------------------------------------------------* FORM get_job_details. * Get current job details CALL FUNCTION 'GET_JOB_RUNTIME_INFO' IMPORTING eventid = gd_eventid eventparm = gd_eventparm external_program_active = gd_external_program_active jobcount = gd_jobcount jobname = gd_jobname stepcount = gd_stepcount EXCEPTIONS no_runtime_info = 1 OTHERS = 2. ENDFORM. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|