비동기 처리를 위한 백그라운드 작업 생성
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.
'ABAP > 개발Tip' 카테고리의 다른 글
[개발Tip] ALV Field catalog(필드 카탈로그) 만드는 3가지 방법 (0) | 2023.08.25 |
---|---|
[개발Tip] RESTful API 호출 2가지 방법(CL_HTTP_CLIENT, CL_REST_HTTP_CLIENT) (0) | 2023.06.28 |
[개발Tip] REPLACE의 REGEX (정규표현식)를 이용한 특수문자 제거 (0) | 2023.06.22 |
[개발Tip] Internal Table 성능(Select into, Read, Loop where) 비교 (1) | 2023.05.16 |
[개발Tip] 필드의 Conversion Exit(내부값/화면표시값 변환) 찾는 방법 (0) | 2023.05.11 |
댓글