본문 바로가기
ABAP/소스코드

[Form] Report 프로그램에 백그라운드 작업 정보 표시

by name_text 2023. 9. 20.

Report 프로그램에 백그라운드 작업 정보 표시

 

백그라운드로 정기작업이 실행되는 Report 프로그램의 경우 Selection Screen에 해당 프로그램의 백그라운드 작업 정보를 표시하는 방법입니다.

정기 작업이나 인터페이스에 대해 Selection Screen에 최근 작업의 결과가 바로 표시되니 상당히 편리하였습니다.

 

 

#1. 서브루틴 소스코드

"MESSAGE_TO_KOREAN" 서브루틴은 아래 참고

2023.09.19 - [ABAP/Function|Class] - [Function] BAPI_MESSAGE_GETDETAIL - 다른 언어로 메시지 출력

FORM GET_BACK_JOB_INFO  USING    P_REPID
                        CHANGING P_TXT_BTCH
                                 P_TXT_BTCHF
                                 P_TXT_BTCHR.
  CLEAR: P_TXT_BTCH, P_TXT_BTCHF, P_TXT_BTCHR.
  CHECK SY-BATCH IS INITIAL. 

  "정기작업만 조회
  SELECT
    A~JOBNAME,
    B~JOBCOUNT,
    B~STATUS,
    A~VARIANT,    "변형
    A~AUTHCKNAM,  "백그라운드 사용자

    B~AUTHCKMAN,  "클라이언트
    B~SDLSTRTDT,  "작업시작일
    B~SDLSTRTTM,   "작업종료일
    B~PERIODIC,   "정기작업
    B~PRDMINS,
    B~PRDHOURS,
    B~PRDDAYS,
    B~PRDWEEKS,
    B~PRDMONTHS
  FROM TBTCP AS A
    INNER JOIN TBTCO AS B ON A~JOBNAME EQ B~JOBNAME AND A~JOBCOUNT EQ B~JOBCOUNT
  WHERE A~PROGNAME  EQ @P_REPID
    AND B~AUTHCKMAN EQ @SY-MANDT
    AND B~PERIODIC  EQ 'X'
    AND B~STATUS IN ( 'S', 'F', 'A' )
  ORDER BY SDLSTRTDT DESCENDING, SDLSTRTTM DESCENDING
  INTO TABLE @DATA(LT_TBTCO)
    UP TO 2 ROWS.
  IF SY-SUBRC NE 0.
    EXIT.
  ENDIF.

  P_TXT_BTCH = '작업 이름'.
  P_TXT_BTCHR = '다음 작업'.
  P_TXT_BTCHF = '최근 작업'.
  DATA: LV_STR(20) TYPE C,
        LT_JOBLOG  TYPE STANDARD TABLE OF TBTC5.
  CLEAR LV_STR.

  "릴리즈된 작업
  READ TABLE LT_TBTCO INTO DATA(LS_TBTCO) WITH KEY STATUS = 'S'.
  IF SY-SUBRC EQ 0.
    P_TXT_BTCH = |{ P_TXT_BTCH } : { LS_TBTCO-JOBNAME }|.
*|{ LV_TIMESTAMP TIMESTAMP = ISO }|.
    P_TXT_BTCHR = |{ P_TXT_BTCHR } : { LS_TBTCO-SDLSTRTDT DATE = USER } { LS_TBTCO-SDLSTRTTM TIME = USER }|.

    IF LS_TBTCO-PRDMINS IS NOT INITIAL.
      WRITE LS_TBTCO-PRDMINS TO LV_STR. CONDENSE LV_STR.
      SHIFT LV_STR LEFT DELETING LEADING '0'.
      LV_STR = |{ LV_STR }|.
    ELSEIF LS_TBTCO-PRDHOURS IS NOT INITIAL.
      WRITE LS_TBTCO-PRDHOURS TO LV_STR. CONDENSE LV_STR.
      SHIFT LV_STR LEFT DELETING LEADING '0'.
      LV_STR = |{ LV_STR }시간|.
    ELSEIF LS_TBTCO-PRDDAYS IS NOT INITIAL.
      WRITE LS_TBTCO-PRDDAYS TO LV_STR. CONDENSE LV_STR.
      SHIFT LV_STR LEFT DELETING LEADING '0'.
      LV_STR = |{ LV_STR }|.
    ELSEIF LS_TBTCO-PRDWEEKS IS NOT INITIAL.
      WRITE LS_TBTCO-PRDWEEKS TO LV_STR. CONDENSE LV_STR.
      SHIFT LV_STR LEFT DELETING LEADING '0'.
      LV_STR = |{ LV_STR }|.
    ELSEIF LS_TBTCO-PRDMONTHS IS NOT INITIAL.
      WRITE LS_TBTCO-PRDMONTHS TO LV_STR. CONDENSE LV_STR.
      SHIFT LV_STR LEFT DELETING LEADING '0'.
      LV_STR = |{ LV_STR }개월|.
    ENDIF.
    IF LV_STR IS NOT INITIAL.
      P_TXT_BTCHR = |{ P_TXT_BTCHR } / { LV_STR } 주기로 반복|.
    ENDIF.
  ELSE.
    P_TXT_BTCHR = |{ P_TXT_BTCHR } : 없음|.
  ENDIF.

  "최근 완료 작업
  DELETE LT_TBTCO WHERE STATUS EQ 'S'.
  READ TABLE LT_TBTCO INTO LS_TBTCO INDEX 1.
  IF SY-SUBRC EQ 0.
    IF P_TXT_BTCH IS INITIAL.
      P_TXT_BTCH = |{ P_TXT_BTCH } : { LS_TBTCO-JOBNAME }|.
    ENDIF.

    P_TXT_BTCHF = |{ P_TXT_BTCHF  } : { LS_TBTCO-SDLSTRTDT DATE = USER } { LS_TBTCO-SDLSTRTTM TIME = USER }|.

    IF LS_TBTCO-STATUS EQ 'F'.
      P_TXT_BTCHF = |{ P_TXT_BTCHF } / 성공|.
    ELSE.
      CALL FUNCTION 'BP_JOBLOG_READ'
        EXPORTING
          CLIENT                      = LS_TBTCO-AUTHCKMAN
          JOBCOUNT                    = LS_TBTCO-JOBCOUNT
          JOBNAME                     = LS_TBTCO-JOBNAME
        TABLES
          JOBLOGTBL                   = LT_JOBLOG
        EXCEPTIONS
          CANT_READ_JOBLOG            = 1
          JOBCOUNT_MISSING            = 2
          JOBLOG_DOES_NOT_EXIST       = 3
          JOBLOG_IS_EMPTY             = 4
          JOBLOG_NAME_MISSING         = 5
          JOBNAME_MISSING             = 6
          JOB_DOES_NOT_EXIST          = 7
          OTHERS                      = 8
                .
      READ TABLE LT_JOBLOG INTO DATA(LS_JOBLOG) WITH KEY MSGTYPE = 'E'.
      IF SY-SUBRC NE 0.
        READ TABLE LT_JOBLOG INTO LS_JOBLOG WITH KEY MSGTYPE = 'A'.
      ENDIF.
      IF SY-SUBRC EQ 0.
        PERFORM MESSAGE_TO_KOREAN USING LS_JOBLOG-MSGID LS_JOBLOG-MSGNO
                                        LS_JOBLOG-MSGV1 LS_JOBLOG-MSGV2 LS_JOBLOG-MSGV3 LS_JOBLOG-MSGV4
                               CHANGING LS_JOBLOG-TEXT.
        P_TXT_BTCHF = |{ P_TXT_BTCHF } / { LS_JOBLOG-TEXT }|.
      ENDIF.
    ENDIF.
  ELSE.
    P_TXT_BTCHF = |{ P_TXT_BTCHF  } : 없음|.
  ENDIF.
ENDFORM.
ABAP

 

#2. 사용 예시

SELECTION-SCREEN BEGIN OF BLOCK BLJ WITH FRAME TITLE TEXT-BLJ.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT  1(79) TXT_BTCH.
  SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(79) TXT_BT_F.
  SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(79) TXT_BT_R.
  SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLJ. 


INITIALIZATION. 
  "백그라운드 작업 정보
  PERFORM GET_BACK_JOB_INFO USING SY-REPID
                         CHANGING TXT_BTCH
                                  TXT_BT_F
                                  TXT_BT_R.
ABAP

댓글