본문 바로가기
ABAP/개발Tip

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

by name_text 2023. 6. 22.

비동기 처리를 위한 백그라운드 작업 생성

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

 

여러가지 이유로 SAP에서 비동기 처리를 해야 할 경우가 생기게 됩니다.

(예 : 실시간 인터페이스시 SAP에서 처리 시간이 오래걸리는 경우, CBO에서 무언가를 처리할때 다른 사용자 ID로 처리해야 할 경우 등등)

 

이런 경우에는 동적으로 백그라운드 작업을 생성하여 처리 할 수 있습니다.

 

참고로, 이런게 비동기 처리를 위해 생성한 백그라운드 작업 중 정상 종료된 건은 이력을 남기는게 무의미 하니 주기적으로 삭제하는게 운영 측면에서 효율적입니다.

2023.06.22 - [ABAP/Function] - [Function] BP_JOB_DELETE - 백그라운드 작업 삭제

 

[Function] BP_JOB_DELETE - 백그라운드 작업 삭제

BP_JOB_DELETE 백그라운드 작업 삭제 비동기 처리를 위해 생성한 백그라운드 작업과 같이 이력이 불필요한 작업에 대해 삭제 할수 있습니다. # 사용 예시 SELECT A~JOBNAME, A~JOBCOUNT FROM TBTCO AS A WHERE A~JOBNA

playabap.tistory.com

 

 

# 소스코드 예시

DATA: LV_JOBNAME  LIKE  TBTCO-JOBNAME,
      LV_JOBCOUNT LIKE  TBTCJOB-JOBCOUNT.
DATA: LV_TIMESTAMP TYPE TZNTSTMPL.

"백그라운드 작업 이름
GET TIME STAMP FIELD LV_TIMESTAMP.
LV_JOBNAME = |{ LV_TIMESTAMP TIMESTAMP = ISO }|.
REPLACE ALL OCCURRENCES OF REGEX '[^[:alnum:]]' IN LV_JOBNAME WITH SPACE.
CONCATENATE 'XS' LV_JOBNAME INTO LV_JOBNAME SEPARATED BY '_'.

"작업번호 생성
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 ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  EXIT.
ELSE.
  "비동기 처리를 위한 리포트 프로그램을 단계에 추가
  SUBMIT ZCMCALLBACK USER SY-UNAME          "프로그램을 실행할 아이디 (실제 사용자 ID 나 인터페이스 처리용 ID로)
                  VIA JOB LV_JOBNAME        "백그라운드 작업 이름
                   NUMBER LV_JOBCOUNT       "작업전호
         WITH P_HSKEY = 'Test value1'       "변형에 들어갈 Selection screen 항목과 값
         WITH P_KEYVA = 'Test value2'       "변형에 들어갈 Selection screen 항목과 값
         AND RETURN.
  IF SY-SUBRC EQ 0.
    CALL FUNCTION 'JOB_CLOSE'               "백그라운드 작업 릴리즈
      EXPORTING
        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
        INVALID_TARGET       = 8
        INVALID_TIME_ZONE    = 9
        OTHERS               = 10.
    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.
  ELSE.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    EXIT.
  ENDIF.
ENDIF.

 

댓글