Ver Mensaje Individual
  #5  
Viejo 13/07/09, 13:44:56
sconoredhot sconoredhot is offline
Senior Member
 
Fecha de Ingreso: feb 2008
Localización: Argentina, Rosario
Mensajes: 341
Cool 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.
Responder Con Cita