Friday, November 20, 2009

Schedule mutiple jobs dynamically in abap

REPORT zpsr_psp_cbf_upload_sch.
***************************************************************
INCLUDE zpsr_psp_cbf_upload_schtop.
START-OF-SELECTION.
SELECT DISTINCT pernr

bukrs
FROM pa0001 INTO TABLE it_pa0001
WHERE bukrs IN ('WC01' ,'WH01','WT01','WT02','WT11', 'WT23', 'WT27', 'WT29', 'WT40', 'WU11')
%_HINTS ORACLE 'INDEX("pa0001" "pa0001~BUK")'.
* This is create secondary index in select statement this improves the performance
IF sy-subrc = 0.
SORT it_pa0001 BY pernr.
IF it_pa0001 IS NOT INITIAL.
SELECT DISTINCT pernr
FROM pa0000
INTO TABLE it_pa0000
FOR ALL ENTRIES IN it_pa0001
WHERE pernr = it_pa0001-pernr AND
endda = '99991231' AND
stat2 = '3'
%_HINTS ORACLE 'INDEX("pa0000" "pa0000~Z03")'.
IF sy-subrc = 0.
SORT it_pa0000 BY pernr.
IF it_pa0000 IS NOT INITIAL.
SELECT DISTINCT pernr
FROM pa0008
INTO TABLE it_pa0008
FOR ALL ENTRIES IN it_pa0000
WHERE pernr = it_pa0000-pernr AND
endda = '99991231' AND
trfgr NOT IN ('GROUP D1', 'GROUP D2', 'GROUP E').
IF sy-subrc = 0.
SORT it_pa0008 BY pernr.
ENDIF.
ENDIF. "End of PA0008
ENDIF.
ENDIF. "End of PA0000
ENDIF. "End of PA0001
DESCRIBE TABLE it_pa0008 LINES lv_count.
lv_n = lv_count / lv_value.
lv_val = lv_n * lv_value.

IF lv_count LT lv_value.
lv_n = '1'.
ELSE.
IF lv_count GT lv_val.
lv_n = lv_n + 1.
ENDIF.
ENDIF.
IF lv_count GE lv_value.

lv_end = lv_value.
ELSE.
lv_end = lv_end + lv_count.
ENDIF.
lv_start = '1'.
DO lv_n TIMES.
LOOP AT it_pa0008 INTO wa_pa0008 FROM lv_start TO lv_end.

rspar_line-selname = 'SO_PERNR'.
rspar_line-kind = 'S'.
rspar_line-low = wa_pa0008-pernr.
rspar_line-sign = 'I'.
rspar_line-option = 'EQ'.
APPEND rspar_line TO rspar_tab.
ENDLOOP.
IF rspar_tab IS NOT INITIAL.
lv_no = sy-index.
CONCATENATE '/oracle/WE3/sapreorg/abap/cbf' lv_no INTO lv_filename.

CONDENSE lv_filename NO-GAPS.
CONCATENATE lv_filename sy-datum INTO lv_filename SEPARATED BY '_'. CONCATENATE lv_filename '.txt' INTO lv_filename.
CONDENSE lv_filename NO-GAPS.
rspar_line-selname = 'P_PATH'.
rspar_line-kind = 'P'.
rspar_line-low = lv_filename.
rspar_line-sign = 'I'.
rspar_line-option = 'EQ'.
APPEND rspar_line TO rspar_tab.
CLEAR: lv_filename.
CONCATENATE lv_name lv_no INTO lv_jobname SEPARATED BY '_'.
CONDENSE lv_jobname NO-GAPS.

********************************************
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = lv_jobname
IMPORTING
jobcount = number
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
*******************************************
IF sy-subrc IS INITIAL.
SUBMIT zpsr_psp_cbf_file TO SAP-SPOOL
SPOOL PARAMETERS print_parameters .
WITHOUT SPOOL DYNPRO
VIA JOB lv_jobname NUMBER number
WITH SELECTION-TABLE rspar_tab
AND RETURN.
ENDIF.
************************************************************
IF sy-subrc IS INITIAL.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = number
jobname = lv_jobname
* predjob_checkstat = 'X'
strtimmed = 'X'
* pred_jobcount = ls_jobstatus-prejobno
* pred_jobname = ls_jobstatus-prejobname
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 IS INITIAL.
WRITE: / lv_jobname, 'is created'.
ELSE.
WRITE: / lv_jobname, 'is not created'.
ENDIF.
ENDIF.
ENDIF.
*********************************************
lv_start = lv_start + lv_value.
lv_end = lv_end + lv_value.
IF lv_end > lv_count.

lv_end = lv_count.
ENDIF.
CLEAR: lv_jobname,

rspar_tab, number.
ENDDO.
**********************************************

No comments: