Crear Job mediante codigo (abap)

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • vlg1971
    Senior Member
    • feb
    • 195

    #1

    Crear Job mediante codigo (abap)

    Alguien sabe si es posible crear un job mediante codigo abap?? me podeis pasar un codigo de ejemplo o indicarme donde puedo encontrar informacion al respecto??

    Gracias por la atencion
  • marianoa
    Member
    • jun
    • 77

    #2
    hola como estas? tenes que usar las funciones open_job y close_job. entre esas funciones pones lo que queres que se corra en ese job. a las funiciones le tenes que pasar el nombre de job que creas. no recuerdo si el numero. si tenes que agregar el numero de job tenes que levantar el ultimo job de una tabla que no recuerdo el nombre y asignarle uno mas.
    saludos

    Comentario

    • vlg1971
      Senior Member
      • feb
      • 195

      #3
      Originalmente publicado por marianoa
      hola como estas? tenes que usar las funciones open_job y close_job. entre esas funciones pones lo que queres que se corra en ese job. a las funiciones le tenes que pasar el nombre de job que creas. no recuerdo si el numero. si tenes que agregar el numero de job tenes que levantar el ultimo job de una tabla que no recuerdo el nombre y asignarle uno mas.
      saludos
      Hola gracias por la respuesta... investigare al respecto....

      Comentario

      • ibecerra

        #4
        aqui esta lo q necesitas

        Comentario

        • sconoredhot
          Senior Member
          • feb
          • 341

          #5
          Ejemplo

          Hola...

          Te mando un ejemplo...

          Crear job desde un report




          Gracias a Pablo Pérez En el start-of-selection del programa NOMBRE-PROGRAMA
          empiezas poniendo esto: ------------------------------------------------------------------------
          START-OF-SELECTION.
          * CUANDO EL USUARIO EJECUTE EL REPORT, SY-BATCH ESTARA A BLANCO.
          * ENTONCES CREAMOS UN JOB, METEMOS EL REPORT EN EL JOB Y CERRAMOS EL
          * JOB EJECUTANDOLO INMEDIATAMENTE.
          * ESE REPORT EJECUTADO EN EL JOB (PROCESO DE FONDO) NO VA A VOLVER A
          * EJECUTARSE A SI MISMO PORQUE AHORA SY-BATCH YA VALE 'X'.

          IF SY-BATCH = ' '.
          PERFORM CREACION_JOB.
          EXIT.
          ENDIF.
          ------------------------------------------------------------------------ De esta manera estas obligando al programa a ejecutarse en fondo. El codigo
          del perform CREACION_JOB viene a continuacion. Lo que hace es crear un job,
          añadir un paso que consiste en la propia ejecucion del programa
          NOMBRE-PROGRAMA con los propios parametros que el usuario ha metido y luego
          cerrar el job con ejecucion inmediata. El primer concatenate es para crear
          el nombre que tendra el job, de manera que puedas distinguirlo claramente al
          ir a ver su log en la transaccion SM37. Yo utilizo esta tecnica para impedir
          que los usuarios ejecuten online determinados reports que se que van a
          tardar mucho y que probablemente provoquen un dump por time-out. Espero que
          te sirva. *&---------------------------------------------------------------------*
          *& Form CREACION_JOB
          *&---------------------------------------------------------------------*
          * text
          *----------------------------------------------------------------------*
          * --> p1 text
          * <-- p2 text
          *----------------------------------------------------------------------*
          FORM FOTR_CREACION_JOB.
          CONCATENATE 'NOMBRE-JOB' SY-DATUM SY-UZEIT INTO JOBNAME
          SEPARATED BY SPACE.
          CALL FUNCTION 'JOB_OPEN'
          EXPORTING
          JOBNAME = JOBNAME
          IMPORTING
          JOBCOUNT = JOBCOUNT
          EXCEPTIONS
          CANT_CREATE_JOB = 1
          INVALID_JOB_DATA = 2
          JOBNAME_MISSING = 3
          OTHERS = 4.

          IF SY-SUBRC NE 0.
          MESSAGE E219(Z5).
          * No se ha podido lanzar el programa como proceso de fondo.
          ELSE.
          SUBMIT NOMBRE-PROGRAMA
          TO SAP-SPOOL " Parametros de impresion
          DESTINATION 'LOCL'
          IMMEDIATELY ' '
          KEEP IN SPOOL ' '
          WITHOUT SPOOL DYNPRO
          USER SY-UNAME " Usuario para el auth-check
          VIA JOB JOBNAME " Job al que se la añade el
          NUMBER JOBCOUNT " step.
          WITH P_VERSN = P_VERSN " Aqui se ponen todos los
          WITH P_GJAHR = P_GJAHR " parametros de seleccion del report
          WITH P_KOSTV = P_KOSTV
          WITH P_PRCTR = P_PRCTR
          WITH P_ACTV = P_ACTV
          WITH S_AUFNR = S_AUFNR
          WITH SO_AUFNR IN SO_AUFNR
          WITH S_KAGRU = S_KAGRU
          WITH SO_KAGRU IN SO_KAGRU
          AND RETURN.

          CALL FUNCTION 'JOB_CLOSE'
          EXPORTING
          JOBCOUNT = JOBCOUNT
          JOBNAME = 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
          OTHERS = 8.
          IF SY-SUBRC NE 0.
          MESSAGE E219(Z5).
          * No se ha podido lanzar el programa como proceso de fondo.
          ELSE.
          MESSAGE I218(Z5).
          * El programa se ha lanzado en proceso de fondo.
          EXIT.
          ENDIF.
          ENDIF.

          ENDFORM. " CREACION_JOB

          Saludos, Sebas
          Sebas

          Desarrollador ABAP.

          Comentario

          • RAMONES
            Member
            • mar
            • 69

            #6
            te dejo un codigo que yo uso...saludos...

            este codigo lo uso para crear el job desde codigo abap...


            FORM criar_job.
            DATA:
            vc_jobname LIKE tbtcjob-jobname, " Nome do job
            vc_jobcount LIKE tbtcjob-jobcount, " Número do job
            vc_rele LIKE btch0000-char1. " Indica se o job foi liberado

            vc_jobname = 'I0002'.

            CALL FUNCTION 'JOB_OPEN'
            EXPORTING
            jobgroup = 'INTERFACE'
            jobname = vc_jobname
            IMPORTING
            jobcount = vc_jobcount
            EXCEPTIONS
            OTHERS = 1.

            IF sy-subrc IS INITIAL.
            SUBMIT (sy-repid)
            USER sy-uname
            VIA JOB vc_jobname NUMBER vc_jobcount
            WITH cb_job = 'X'
            AND RETURN.

            IF vn_uzeit <= sy-uzeit AND vn_datum = sy-datum.

            CALL FUNCTION 'JOB_CLOSE'
            EXPORTING
            jobcount = vc_jobcount
            jobname = vc_jobname
            strtimmed = 'X'
            targetsystem = ''
            IMPORTING
            job_was_released = vc_rele
            EXCEPTIONS
            OTHERS = 1.
            ELSE.

            IF sy-uzeit >= c_dat1.
            vn_datum = sy-datum + 1.
            vn_uzeit = sy-uzeit + 900.
            ELSE.
            vn_datum = sy-datum .
            vn_uzeit = sy-uzeit + 600.
            ENDIF.


            CALL FUNCTION 'JOB_CLOSE'
            EXPORTING
            jobcount = vc_jobcount
            jobname = vc_jobname
            sdlstrtdt = vn_datum
            sdlstrttm = vn_uzeit
            targetsystem = ''
            IMPORTING
            job_was_released = vc_rele
            EXCEPTIONS
            OTHERS = 1.
            ENDIF.

            IF NOT sy-subrc IS INITIAL.
            MESSAGE s043 WITH vc_jobname.
            ENDIF.
            ELSE.
            MESSAGE s043 WITH vc_jobname.
            ENDIF.
            ENDFORM. " CRIAR_JOB
            El mundo es Redondo y de Ricota......

            Comentario

            Trabajando...