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.

  DATA: E_T_MSG  TYPE  RS_T_MSG,
        S_MSG LIKE LINE OF E_T_MSG,
        E_TXT(40) TYPE  C 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 - 1 .
  LV_TLEN   = STRLEN( O_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 - 1 .
    ENDIF.
  ENDDO.

  LV_LEN     = STRLEN( O_TEXT1 ).
  LV_TLEN    = LV_TLEN - LV_LEN.
  O_TEXT2    = O_TEXT2+LV_LEN(LV_TLEN).

ENDFORM.                    " CUT_STRING