Programa en fondo

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • FrancescRibot
    Junior Member
    • jul
    • 18

    #1

    Programa en fondo

    Hola a tod@s.

    Tengo que ejecutar un programa z con una dynpro creada por mi en fondo.

    El problema es que lo quiero ejecutar mediante la opción del menú, programa --> ejecutar en proceso de fondo.

    Me he dado cuneta que si la pantalla de selección está definida con parameters o select-options de lo hace automaticamente, pero si la creas tu no.

    He modificado el status gui pero no consigo hacer que el estandard haga esta funcionalidad.

    ¿Alguna idea?

    Gracias
  • ballan
    Senior Member
    • oct
    • 671

    #2
    Creo que no vas a poder encontrar una manera "standard" de hacerlo, lo que tendrias que hacer es añadir un boton, o una entrada de menu en el status gui y poner el codigo necesario para ejecutar tu programa en fondo (tendras que recuperar los datos que ha introducido el usuario en pantalla y entonces llamar a tu programa en fondo)

    Te adjunto el codigo que yo tengo para lanzar un report en fondo para que te hagas una idea (este codigo lo he sacado de un metodo que cree hace tiempo que recibe como parametros iv_repid iv_nombre que estan declarados como CLIKE)

    En resumen es

    llamar a JOB_OPEN

    hacer un submit a tu report pasandole los parametros necesarios y con la adiccion VIA JOB

    llamar a JOB_CLOSE


    DATA: lv_nombre TYPE tbtco-jobname,
    lv_repid TYPE syrepid,
    lv_number TYPE tbtco-jobcount,
    lv_ret TYPE i.

    IF iv_nombre IS INITIAL.

    lv_nombre = iv_repid.

    ELSE.

    lv_nombre = iv_nombre.

    ENDIF.

    lv_repid = iv_repid.

    CALL FUNCTION 'JOB_OPEN'
    EXPORTING
    * DELANFREP = ' '
    * JOBGROUP = ' '
    jobname = lv_nombre
    * SDLSTRTDT = NO_DATE
    * SDLSTRTTM = NO_TIME
    * JOBCLASS =
    IMPORTING
    jobcount = lv_number
    CHANGING
    ret = lv_ret
    EXCEPTIONS
    cant_create_job = 1
    invalid_job_data = 2
    jobname_missing = 3
    OTHERS = 4.

    IF sy-subrc <> 0.

    subrc = sy-subrc.
    EXIT.

    ENDIF.

    SUBMIT (lv_repid) VIA JOB lv_nombre NUMBER lv_number AND RETURN.

    CALL FUNCTION 'JOB_CLOSE'
    EXPORTING
    * AT_OPMODE = ' '
    * AT_OPMODE_PERIODIC = ' '
    * CALENDAR_ID = ' '
    * EVENT_ID = ' '
    * EVENT_PARAM = ' '
    * EVENT_PERIODIC = ' '
    jobcount = lv_number
    jobname = lv_nombre
    * LASTSTRTDT = NO_DATE
    * LASTSTRTTM = NO_TIME
    * PRDDAYS = 0
    * PRDHOURS = 0
    * PRDMINS = 0
    * PRDMONTHS = 0
    * PRDWEEKS = 0
    * PREDJOB_CHECKSTAT = ' '
    * PRED_JOBCOUNT = ' '
    * PRED_JOBNAME = ' '
    * SDLSTRTDT = NO_DATE
    * SDLSTRTTM = NO_TIME
    * STARTDATE_RESTRICTION = BTC_PROCESS_ALWAYS
    strtimmed = 'X'
    * TARGETSYSTEM = ' '
    * START_ON_WORKDAY_NOT_BEFORE = SY-DATUM
    * START_ON_WORKDAY_NR = 0
    * WORKDAY_COUNT_DIRECTION = 0
    * RECIPIENT_OBJ =
    * TARGETSERVER = ' '
    * DONT_RELEASE = ' '
    * TARGETGROUP = ' '
    * DIRECT_START =
    * IMPORTING
    * JOB_WAS_RELEASED =
    CHANGING
    ret = lv_ret
    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.

    subrc = sy-subrc.

    Comentario

    • FrancescRibot
      Junior Member
      • jul
      • 18

      #3
      Muchas gracias ballan por el codigo.

      Veré a ver que hago al final.

      Comentario

      Trabajando...