2014년 10월 23일 목요일

[SAP] BAPI나 BDC 에러 로그를 팝업창으로 표시하기



DATA BEGIN OF IT_DATA OCCURS 0,
       ICON(4),
       .......
       T_MSG      TYPE RS_T_MSG,   "에러 로그 저장용 필드 선언
       END OF IT_DATA.


* BAPI나 BDC에서 발생된 에러 로그를 저장한다.
DATA LT_MSG  TYPE RS_T_MSG,
       LS_MSG  LIKE LINE OF LT_MSG.
 


REFRESH LT_MSG.
LOOP AT RETURN.
  CLEAR LS_MSG.
  LS_MSG-MSGTY RETURN-TYPE.
  LS_MSG-MSGID RETURN-ID.
  LS_MSG-MSGNO RETURN-NUMBER.
  LS_MSG-MSGV1 RETURN-MESSAGE_V1.
  LS_MSG-MSGV2 RETURN-MESSAGE_V2.
  LS_MSG-MSGV3 RETURN-MESSAGE_V3.
  LS_MSG-MSGV4 RETURN-MESSAGE_V4.
  APPEND LS_MSG TO LT_MSG .
ENDLOOP. 

IT_DATA-T_MSG LT_MSG.  

* ALV상의 더블클릭이나 HOTSPOT 이벤트에 팝업 표시 기능 추가
FORM ALV_DOUBLE_CLICK USING E_ROW     TYPE LVC_S_ROW
                            E_COLUMN  TYPE LVC_S_COL
                            ES_ROW_NO TYPE LVC_S_ROID.
  DATA LS_DATA LIKE LINE OF IT_DATA.
  READ TABLE IT_DATA INDEX ES_ROW_NO-ROW_ID INTO LS_DATA.

  DATAE_T_MSG  TYPE  RS_T_MSG,
        S_MSG LIKE LINE OF E_T_MSG,
        E_TXT(40TYPE  VALUE 'Error List',
        E_WITH_S_ON_EMPTY TYPE  RS_BOOL VALUE 'X',
        E_ONE_MSG_DIRECT  TYPE  RS_BOOL VALUE ' ',
        E_ONE_MSG_TYPE_S  TYPE  RS_BOOL VALUE 'X',
        I_S_EXIT_COMMAND  TYPE  BAL_S_EXCM.


  REFRESH E_T_MSG.
  E_T_MSG LS_DATA-T_MSG.

  CHECK E_T_MSG[] IS NOT INITIAL.
  CALL FUNCTION 'RSDC_SHOW_MESSAGES_POPUP'
    EXPORTING
      I_T_MSG           E_T_MSG
      I_TXT             E_TXT
      I_WITH_S_ON_EMPTY E_WITH_S_ON_EMPTY
      I_ONE_MSG_DIRECT  E_ONE_MSG_DIRECT
      I_ONE_MSG_TYPE_S  E_ONE_MSG_TYPE_S
    IMPORTING
      E_S_EXIT_COMMAND  I_S_EXIT_COMMAND.
ENDFORM.              


2014년 10월 8일 수요일

ABAP 한글 출력 길이 조정



PERFORM CUT_STRING USING LV_DESC 20 CHANGING LV_TEXT1 LV_TEXT2.



FORM CUT_STRING  USING    I_ZPKRE  I_LEN  CHANGING O_TEXT1 O_TEXT2.

  DATA LV_LEN     TYPE I,
         LV_LEN2    TYPE I,
         LV_TLEN    TYPE I.

  CLEAR LV_LEN LV_LEN2 LV_TLEN O_TEXT1 ,O_TEXT2 .

  O_TEXT1   I_ZPKRE.
  O_TEXT2   O_TEXT1.
  LV_LEN2   I_LEN .
  LV_TLEN   STRLENO_TEXT1 ).


  DO 40 TIMES.

" 출력될문자열의 실제 길이 확인
    CALL METHOD CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH
      EXPORTING
        FIELD O_TEXT1
      RECEIVING
        LEN   LV_LEN.

    IF LV_LEN <= I_LEN.
      EXIT.
    ELSE.
      O_TEXT1  O_TEXT1+0(LV_LEN2).
      LV_LEN2 LV_LEN2 .
    ENDIF.
  ENDDO.

  LV_LEN     STRLENO_TEXT1 ).
  LV_TLEN    LV_TLEN LV_LEN.
  O_TEXT2    O_TEXT2+LV_LEN(LV_TLEN).

ENDFORM.                    " CUT_STRING