MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 18/03/15, 00:17:28
pancho6102 pancho6102 is offline
Senior Member
 
Fecha de Ingreso: jun 2010
Localización: Queretaro México
Mensajes: 238
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.
Responder Con Cita
  #2  
Viejo 18/03/15, 10:58:13
sconoredhot sconoredhot is offline
Senior Member
 
Fecha de Ingreso: feb 2008
Localización: Argentina, Rosario
Mensajes: 341
Smile 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.
Responder Con Cita
  #3  
Viejo 18/03/15, 20:08:34
pancho6102 pancho6102 is offline
Senior Member
 
Fecha de Ingreso: jun 2010
Localización: Queretaro México
Mensajes: 238
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.
Responder Con Cita
  #4  
Viejo 21/03/15, 10:34:54
ehrman ehrman is offline
Junior Member
 
Fecha de Ingreso: may 2011
Mensajes: 5
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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 13:39:28.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web