2025-02-12
[SAP/ABAP] Batch termination function ‘BP_JOB_ABORT’
가끔씩 데이터가 꼬였는지(?) Batch 가 끝나지않아 강제로 중단해줘야 하는 경우가 있다.
나는 새프로그램을 생성하여, 2분전에 실행한 Batch가 아직도 끝나지 않았을경우 Batch 종료 시키는 프로그램을 생성하였다. (이럴만한 사정이 있었다,, )
DATA : LV_SDLSTRTTM TYPE SY-UZEIT, "배치 시작시간
LV_JOBCOUNT TYPE BTCJOBCNT,
LV_CURRENT_TIME TYPE SY-UZEIT,
LV_ONE_MIN_AGO TYPE SY-UZEIT.
CLEAR : LV_CURRENT_TIME, LV_ONE_MIN_AGO, LV_JOBCOUNT, LV_SDLSTRTTM.
DATA : BEGIN OF GS_JOB,
JOBNAME TYPE BTCJOB,
END OF GS_JOB,
GT_JOB LIKE TABLE OF GS_JOB.
GT_JOB = VALUE #( ( JOBNAME = 'batch1' ) ( JOBNAME = 'batch2' ) ).
LV_CURRENT_TIME = SY-UZEIT. "현재시간
LV_ONE_MIN_AGO = LV_CURRENT_TIME - 120. "2분전
LOOP AT GT_JOB INTO GS_JOB.
SELECT JOBCOUNT SDLSTRTTM FROM TBTCO UP TO 1 ROWS INTO (LV_JOBCOUNT , LV_SDLSTRTTM)
WHERE JOBNAME = GS_JOB-JOBNAME
AND STATUS = 'R'
ORDER BY SDLSTRTTM ASCENDING.
ENDSELECT.
IF SY-SUBRC = 0.
IF LV_SDLSTRTTM <= LV_ONE_MIN_AGO.
CALL FUNCTION 'BP_JOB_ABORT' "batch termination function
EXPORTING
JOBCOUNT = LV_JOBCOUNT
JOBNAME = GS_JOB-JOBNAME
EXCEPTIONS
CHECKING_OF_JOB_HAS_FAILED = 1
JOB_ABORT_HAS_FAILED = 2
JOB_DOES_NOT_EXIST = 3
JOB_IS_NOT_ACTIVE = 4
NO_ABORT_PRIVILEGE_GIVEN = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.