ABAP

[SAP_ABAP] CBO에서도 스탠다드에서 뜨는 메세지창 처럼 띄우는법

universe8 2022. 8. 27. 21:00

CBO에서도 스탠다드에서 뜨는 메세지창처럼 메세지 띄우는 방법

Function Module : C14Z_MESSAGES_SHOW_AS_POPUP

 

 

구매오더(PO) 생성 (T-CODE: ME21N) 에 대한 USER-EXIT 수정 하는 업무를 받았는데, 추가요청을 받았다.

 

USER-EXIT을 수정하면서  추가하면서 에러메세지를 아래와 같이 일반 MESSAGE 구문을 사용해서 보여줬는데,

 

 

MESSAGE E016(PH) WITH '문제가 발생하였습니다.'.	"예시

MESSAGE E016(PHWITH '문제가 발생하였습니다.'.

MESSAGE E016(PH) WITH '문제가 발생하였습니다.'.

 

이렇게 스탠다드에서 보여지는 메세지창처럼 띄워달라는 것.

 

처음에는?????뭐지????하고 당황했는데,

메세지 팝업창 띄워주는 함수(function module)가 있다는걸 알게 됐다!

Function Module : C14Z_MESSAGES_SHOW_AS_POPUP

 

스탠다드 메세지 클래스인 MESSAGE-ID : PH를 이용했을때를 예를들어 설명하자면,

 

#1.메세지를 한건만 띄울때.

아래와 같이 코드를 입력하면 된다.

 

CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'

 EXPORTING

   I_MSGID             'PH'      "MESSAGE-ID

   I_MSGTY             'E'       "메세지유형

   I_MSGNO             '016'     "메세지번호

   I_MSGV1             'MSGV1'   "&1

   I_MSGV2             'MSGV2'   "&2

   I_MSGV3             'MSGV3'   "&3

   I_MSGV4             'MSGV4'   "&4

   I_LINENO            1

* TABLES

*   I_MESSAGE_TAB       =

          .

 

 

결과화면은 다음과 같다.

FUNCTION MODULE  'C14Z_MESSAGES_SHOW_AS_POPUP'을 이용해서 메세지를 한 건만 띄웠을 때

 

 

#2. 메세지를 여러개 보여주는 경우

Function Module C14Z_MESSAGES_SHOW_AS_POPUP의 장점은

여러개의 메세지를 하나의 팝업창에 띄울 수 있다는 것이다. 

 

프로그램을 실행했을때 메세지창은 다음과 같이 보여진다.

Function Module C14Z_MESSAGES_SHOW_AS_POPUP로 여러개의 메세지를 보여주는 경우

여러 메세지들의 타입이 E(Error), S(Success), W(Warning), I(Info), A(Stop) 로 다 다른 경우에도 위와같이 하나의 팝업창에 담아서 보여줄 수 있다!

 

코드는 다음과 같이 입력하면 된다.

 

DATALT_MESSAGE TYPE  ESP1_MESSAGE_TAB_TYPE,

      LS_MESSAGE LIKE LINE OF LT_MESSAGE.

 

*--------------------------------------------------------------------*

 

PERFORM MESSAGE USING'PH' 'E' 16 'ERROR MESSAGE',

                       'PH' 'S' 16 'SUCCESS MESSAGE',

                       'PH' 'W' 16 'WARNING MESSAGE',

                       'PH' 'I' 16 'INFO MESSAGE',

                       'PH' 'A' 16 'STOP MESSAGE'.

 

*--------------------------------------------------------------------*

 

CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'

* EXPORTING

*   I_MSGID             = 'PH'      "MESSAGE-ID

*   I_MSGTY             = 'E'       "메세지유형

*   I_MSGNO             = '016'     "메세지번호

*   I_MSGV1             = 'MSGV1'   "&1

*   I_MSGV2             = 'MSGV2'   "&2

*   I_MSGV3             = 'MSGV3'   "&3

*   I_MSGV4             = 'MSGV4'   "&4

*   I_LINENO            = 1

 TABLES

   I_MESSAGE_TAB       LT_MESSAGE

          .

 

*&---------------------------------------------------------------------*

*&      Form  MESSAGE

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->P_0016   text

*      -->P_0017   text

*      -->P_16     text

*      -->P_0019   text

*----------------------------------------------------------------------*

FORM MESSAGE  USING  P_MSGID

                     P_MSGTY

                     P_MSGNO

                     P_MSGV1.

 

  LS_MESSAGE-MSGID P_MSGID.

  LS_MESSAGE-MSGTY P_MSGTY.

  LS_MESSAGE-MSGNO P_MSGNO.

  LS_MESSAGE-MSGV1 P_MSGV1.

 

  APPEND LS_MESSAGE TO LT_MESSAGE.

  CLEAR LS_MESSAGE.

 

ENDFORM.                    " MESSAGE

 

[참고]

ABAP 프로그램에서 Function Module  C14Z_MESSAGES_SHOW_AS_POPUP 을 사용하지 않고 일반 MESSAGE~구문을 사용하여 여러 메세지창을 띄우는 경우,

 로직 중간중간에 여러개의 메세지를 넣어 모두 실행화면에 보여주고 싶어서 아래와 같이 여러 메세지를 입력하더라도,

프로그램을 실행하게 되면 가장 마지막 메세지인 MESSAGE S016(PHWITH '정상적으로 처리 되었습니다'. 메세지창만 화면에 보여지게 된다. 

여러 메세지 중에 가장 마지막 메세지창만 실행 화면에 보여진다.
ZTEST_MESSAGE 프로그램 실행화면

따라서 여러 메세지창을 모두 보여주고 싶을 때에도 Function Module : C14Z_MESSAGES_SHOW_AS_POPUP를 활용하면 된다.

반응형