Está en la página 1de 7

Jobs ABAP con Cdigo

Las siguientes funciones se realizan una tras otra, asi debe ser. Los comentarios que vez en la funcin JOB_SUBMIT se lo puedes quitar. La parte del submit que no tiene comentarios la hice porque necesitaba mandarle una tabla al programa de fondo esa parte la puedes comentarizar y la del comentario activarla si asi conviene a tu programa. Form Ejecuta_Job_Fondo. * Call Function 'JOB_OPEN' Exporting JobName = 'ZDME0047' Importing jobcount = Tbtcjob-Jobcount Exceptions Others = 0. ** * Call Function 'JOB_SUBMIT' * Exporting * authcknam = Sy-Uname * Jobcount = Tbtcjob-jobcount * Jobname = 'ZDME0047' * Report = 'ZDME0047' ** Variant = '' * Exceptions * Bad_Priparams = 1 * Bad_Xpgflags = 2 * Invalid_Jobdata = 3 * Jobname_Missing = 4 * Job_Notex = 5 * Job_Submit_Failed = 6 * Lock_Failed = 7 * Program_Missing = 8 * Prog_Abap_And_Extpg_Set = 9. * Submit ZDME0047 With p_Oferta In R_Ofertas To Sap-Spool Spool Parameters Print_parameters WithOut Spool Dynpro Via Job 'ZDME0047' Number Tbtcjob-Jobcount User Sy-Uname And Return.

Jobs ABAP con Cdigo


Call Function 'JOB_CLOSE' Exporting Jobcount = tbtcjob-jobcount jobname = 'ZDME0047' strtimmed = 'X' Exceptions Cant_Start_Immediate = 1 Invalid_StarDate = 2 Jobname_Missing = 3 Job_Close_Failed = 4 Job_Nosteps = 5 Job_notex = 6 Lock_Failed = 7 Invalid_Target = 8. * EndForm. ******************************************************** Ejemplo facilito lv_jobname = 'ZPROG088A'. CALL FUNCTION 'JOB_OPEN' EXPORTING jobname = lv_jobname IMPORTING jobcount = lv_jobcount EXCEPTIONS cant_create_job = 1 invalid_job_data = 2 jobname_missing = 3 OTHERS = 4. IF sy-subrc <> 0. MESSAGE e208(00) WITH 'Error creating Job'. ENDIF. SUBMIT zprog088a WITH p_ini = f_inicio WITH p_fin = f_fin WITH p_usu = sy-uname VIA JOB lv_jobname NUMBER lv_jobcount AND RETURN. IF sy-subrc <> 0. MESSAGE e208(00) WITH 'Error scheduling Job'. ENDIF.

Jobs ABAP con Cdigo


CALL FUNCTION 'JOB_CLOSE' EXPORTING * at_opmode = 'X' jobcount = lv_jobcount jobname = lv_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 <> 0. MESSAGE e208(00) WITH 'Error closing Job'. ELSE. MESSAGE s368(00) WITH 'Job created:' lv_jobcount. ENDIF.

******************************************************** Crear job desde un report 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, aadir 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

Jobs ABAP con Cdigo


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 aade 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

Jobs ABAP con Cdigo


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 *************************************************** 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, " Nmero 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

Jobs ABAP con Cdigo


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.

Jobs ABAP con Cdigo


ELSE. MESSAGE s043 WITH vc_jobname. ENDIF. ENDFORM. " CRIAR_JOB

También podría gustarte