본문 바로가기
ABAP/개발Tip

[개발Tip] Event 호출로 백그라운드 작업 실행(Event Batch)

by name_text 2023. 9. 14.

Event 호출로 백그라운드 작업 실행(Event Batch)

비동기 처리를 위한 백그라운드 작업 실행

RFC, OData 인터페이스시 비동기 처리

 

비동기 처리를 위해 백그라운드 작업을 만들어서 프로그램을 실행할수 있습니다.

백그라운드 작업을 동적으로 생성하면 해당 프로그램을 실행할 User ID를 동적으로 지정할수 있고 여러가지 상황에서 유연하게 활용할 수 있습니다.

2023.06.22 - [ABAP/개발Tip] - [개발Tip] 비동기 처리를 위한 백그라운드 작업 생성

 

[개발Tip] 비동기 처리를 위한 백그라운드 작업 생성

비동기 처리를 위한 백그라운드 작업 생성 RFC, OData 인터페이스시 비동기 처리 여러가지 이유로 SAP에서 비동기 처리를 해야 할 경우가 생기게 됩니다. (예 : 실시간 인터페이스시 SAP에서 처리 시

playabap.tistory.com

단, 단계로 등록되는 프로그램의 변형(Variant)도 작업 생성시마다 동적으로 생성되다 보니 VARI 및 TBTCO의 Variant 필드 오버플로우가 발생할 가능이 있습니다.

(실제 해당 필드의 길이가 넉넉하여 오버플로어가 발생한 가능성은 적지만 VARI 테이블 레코드가 지속적으로 증가한다는건 부담스럽긴 합니다)

 

User ID를 동적으로 지정할 필요가 없다면 Event에 의해 실행되는 백그라운드 작업을 등록하여, 소스코드내에서 해당 Event를 호출하여 비동기 처리를 구현할 수 있습니다.

이 경우 Variant와 Event Number가 증가되지 않습니다.

 

#1. Event 생성

T-Code : SM62

#2. 백그라운드 작업 등록

  1) 시작 조건을 "After Event(이벤트 후)"로 선택 후 SM62에서 생성한 Event ID를 입력

      - Event : SM62에 생성한 Event ID

      - Parameter : 공란 (Event를 호출하는 소스코드내에서 Parameter 값 입력하기 위해)

      - Periodic Job : 체크

  1) Step(단계)에 실행할 리포트 프로그램 입력

      - User : 프로그램을 실행할 ID

      - ABAP Program : 실행할 프로그램과 Variant 입력

 

#3. 프로그램내에서 Event 호출

PARAMETERS: P_EVENT TYPE TBTCO-EVENTID   OBLIGATORY DEFAULT 'Z_TEST_EVENT',
            P_EPARM TYPE TBTCO-EVENTPARM OBLIGATORY.

DATA: LV_EVENTID    LIKE TBTCO-EVENTID,
      LV_EVENTPARM  LIKE TBTCO-EVENTPARM.

*#1. 이벤트 배치에 넘겨줄 파라미터 값 생성
  MOVE: P_EVENT TO LV_EVENTID,
        P_EPARM TO LV_EVENTPARM.

*#2. 이벤트 호출
CALL FUNCTION 'BP_EVENT_RAISE'
  EXPORTING
    EVENTID                      = LV_EVENTID
    EVENTPARM                    = LV_EVENTPARM
*   TARGET_INSTANCE              = ' '
*   TARGET_MODE                  = ' '
  EXCEPTIONS
    BAD_EVENTID                  = 1
    EVENTID_DOES_NOT_EXIST       = 2
    EVENTID_MISSING              = 3
    RAISE_FAILED                 = 4
    OTHERS                       = 5
          .
IF SY-SUBRC <> 0.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  EXIT.
ELSE.
  WRITE:/ 'OK'.
ENDIF.
ABAP

 

#4. 백그라운드 작업에 등록한 프로그램에서 Event 정보 조회

DATA: LV_JOBNAME    LIKE TBTCO-JOBNAME,
      LV_JOBCOUNT   LIKE TBTCO-JOBCOUNT,
      LV_EVENTID    LIKE TBTCO-EVENTID,
      LV_EVENTPARM  LIKE TBTCO-EVENTPARM.

*#3 이벤트 정보 조회
CALL FUNCTION 'GET_JOB_RUNTIME_INFO'
  IMPORTING
    EVENTID                       = LV_EVENTID
    EVENTPARM                     = LV_EVENTPARM
*   EXTERNAL_PROGRAM_ACTIVE       =
    JOBCOUNT                      = LV_JOBCOUNT
    JOBNAME                       = LV_JOBNAME
*   STEPCOUNT                     =
  EXCEPTIONS
    NO_RUNTIME_INFO               = 1
    OTHERS                        = 2
          .
IF SY-SUBRC <> 0.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  EXIT.
ENDIF.

WRITE:/ LV_JOBNAME, LV_JOBCOUNT.
WRITE:/ LV_EVENTID, LV_EVENTPARM.
ABAP

 

#테스트 결과

   1) 이벤트 호출

   2) 이벤트 배치 작업 결과

   3) 이벤트 배치에 등록된 프로그램의 실행 결과

 

댓글