ejecutar programa en fondo

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • pancho6102
    Senior Member
    • jun
    • 238

    #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.
  • sconoredhot
    Senior Member
    • feb
    • 341

    #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.

    Comentario

    • pancho6102
      Senior Member
      • jun
      • 238

      #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.

      Comentario

      • ehrman
        Junior Member
        • may
        • 5

        #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.

        Comentario

        Trabajando...