[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.

Add a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다