SAP ABAP

ABAP Long Text 등록 및 사용 방법

모델와이 2025. 2. 11. 14:38

안녕하세요. 모델와이입니다.

 

오늘은 ABAP 로직 중 장문의 글을 등록 및 관리하여야 할 때 (255자 이상)

테이블에 해당 데이터를 저장하기가 어려움이 존재할 때, 또는 텍스트 내역에 대한 저장이 엔터와 같은 조판부호가 포함될 경우 사용하기에 용이합니다.

 

CBO(Condition-Based Output) 프로그램에서 Long Text를 등록하고 사용하는 방법을 설명해드릴게요.

CBO는 주로 SAP Output Management에서 특정 조건을 기반으로 출력되는 메시지를 관리하는 기능입니다.


📌 CBO 프로그램에서 Long Text 사용 방법

🔹 1. Long Text 등록 (CBO 프로그램에서 저장)

CBO 프로그램에서 Long Text를 저장하려면 SAVE_TEXT FM을 사용하여 특정 텍스트 객체텍스트 ID에 데이터를 저장할 수 있습니다.

ABAP 코드 예제 (Long Text 저장)

DATA: lt_lines TYPE TABLE OF tline,
      ls_lines TYPE tline.

ls_lines-tdline = 'CBO 메시지에 사용할 Long Text 입니다.'.
APPEND ls_lines TO lt_lines.

CALL FUNCTION 'SAVE_TEXT'
  EXPORTING
    id       = 'ZCBO'     " CBO에서 사용하는 텍스트 ID
    name     = 'CBO_1001' " CBO에서 사용하는 키
    object   = 'ZCB1'     " CBO에서 지정한 텍스트 객체
  TABLES
    lines    = lt_lines
  EXCEPTIONS
    others   = 1.

COMMIT WORK.

핵심 포인트

  • OBJECT : CBO에서 사용하는 텍스트 객체 (ZCBO_OBJ 등)
  • ID : CBO에서 특정 메시지 유형에 사용하는 텍스트 ID
  • NAME : CBO 메시지 키 (예: 'CBO_1001')

🔹 2. Long Text 불러오기 (CBO 출력 시)

CBO에서 메시지를 출력할 때 저장된 Long Text를 불러오려면 READ_TEXT를 사용합니다.

ABAP 코드 예제 (Long Text 조회)

DATA: lt_lines TYPE TABLE OF tline,
      ls_lines TYPE tline.

CALL FUNCTION 'READ_TEXT'
  EXPORTING
    id       = 'ZCBO'     " CBO 메시지의 텍스트 ID
    language = 'EN'
    name     = 'CBO_1001' " 메시지 키 (저장된 값과 동일해야 함)
    object   = 'ZCB1' " 텍스트 객체
  TABLES
    lines    = lt_lines
  EXCEPTIONS
    others   = 1.

LOOP AT lt_lines INTO ls_lines.
  WRITE: / ls_lines-tdline.
ENDLOOP.

핵심 포인트

  • CBO에서 메시지를 생성할 때 해당 키(NAME)에 맞는 Long Text를 불러와 출력
  • 텍스트가 여러 줄일 경우 LOOP AT로 읽어들여 사용

🔹 3. CBO 저장 Logic - Detail

CBO 프로그램에서 해당 내역을 저장할 경우 데이터를 변환하고 매핑하여 저장하는 프로세스를 실행해야 합니다.
해당 과정을 위에보다 디테일하게 정리해보겠습니다.

✅ CBO 프로그램에서 저장하는 방법

  1. SE75에서 오브젝트를 등록합니다.
    ㄱ) SE75를 실행하여, Text Object 및 ID를 변경으로 조회합니다.
    SE75 화면

    ㄴ) 생성 버튼 클릭 후 텍스트 오브젝트 , 내역, 어플리케이션, 라인너비를 기입 후 확인 버튼을 누릅니다.
    생성 화면
    아래와 같이 생성됨을 확인할 수 있습니다.
    생성 등록

    해당 내역을 더블 클릭하여, 들어가면 텍스트 ID에 대한 등록이 나옵니다.
    하위 오브젝트의 개념으로 보시면 됩니다.
    앞서 하신 등록과 마찬가지로 하위 내역 생성하시면 됩니다.
    텍스트 ID 생성

    등록 후 아래의 저장버튼을 클릭하여 CTS Object를 반드시 묶어주어야 합니다.
    CTS Object 등록


    생성 CTS Object 확인

    해당 CTS를 이관하여 처리할 수 있습니다.
  2. 1번의 Long text 등록 Function을 통해 저장을 수행합니다.
  3. 아래와 같이 입력하여 ABAP 작성을 통해 완료합니다.

    ✅ CBO 프로그램에서 저장하는 방법

    생성한 입력 ALV 박스를 통해 데이터를 전달 받고 해당 내역을 저장합니다.
    Text ALV 생성 로직은 아래와 같습니다.
TYPES : BEGIN OF TY_TEXTTABLE,
          LINE(4096),
        END OF TY_TEXTTABLE.

DATA : GO_CCON1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
       GT_TLINE TYPE TABLE OF TY_TEXTTABLE,
       LV_MODE  TYPE I.

CHECK GO_TEXTEDIT1 IS INITIAL.

"Custom container 생성
CREATE OBJECT GO_CCON1
  EXPORTING
    CONTAINER_NAME              = 'CON_TEXT'
  EXCEPTIONS
    CNTL_ERROR                  = 1
    CNTL_SYSTEM_ERROR           = 2
    CREATE_ERROR                = 3
    LIFETIME_ERROR              = 4
    LIFETIME_DYNPRO_DYNPRO_LINK = 5.

CALL METHOD GO_CCON1->SET_VISIBLE
  EXPORTING
    VISIBLE           = C_X
  EXCEPTIONS
    CNTL_ERROR        = 1
    CNTL_SYSTEM_ERROR = 2
    OTHERS            = 3.

"Long Text Set
CREATE OBJECT GO_TEXTEDIT1
  EXPORTING
    PARENT                     = GO_CCON1
    WORDWRAP_MODE              = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION
    WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>FALSE
    FILEDROP_MODE              = CL_GUI_TEXTEDIT=>DROPFILE_EVENT_MULTIPLE.

"Toolbar 및 Status 제외
CALL METHOD GO_TEXTEDIT1->SET_TOOLBAR_MODE
  EXPORTING
    TOOLBAR_MODE = CL_GUI_TEXTEDIT=>FALSE.

CALL METHOD GO_TEXTEDIT1->SET_STATUSBAR_MODE
  EXPORTING
    STATUSBAR_MODE = CL_GUI_TEXTEDIT=>FALSE.

"텍스트를 받을 테이블 입력
CALL METHOD GO_TEXTEDIT1->SET_TEXT_AS_R3TABLE
  EXPORTING
    TABLE = GT_TLINE[].

"조회 모드 여부 확인( 0: 수정가능, 1: 조회만 )
CALL METHOD GO_TEXTEDIT1->SET_READONLY_MODE
  EXPORTING
    READONLY_MODE          = 0
  EXCEPTIONS
    ERROR_CNTL_CALL_METHOD = 1
    INVALID_PARAMETER      = 2
    OTHERS                 = 3.

 

 

입력 ALV 생성

위의 내역에 입력 후 확인 시 로직은 아래와 같습니다.

 

TYPES : BEGIN OF TY_TEXTTABLE,
          LINE(4096),
        END OF TY_TEXTTABLE.

DATA : GO_TEXTEDIT TYPE REF TO CL_GUI_TEXTEDIT,
       LT_TLINE_EX TYPE TABLE OF TLINE,
       LV_TDOBJ    TYPE THEAD-TDNAME,
       LV_MODI     TYPE I.

"변경된 Long Text 내역 조회
"qwer
"asdf -> 이렇게 입력 시 GT_TLINE에 2라인으로 입력된다. (엔터인식)
"여기서 입력될 필요는 없지만 필요하시면 쓰시라고 기입
CALL METHOD GO_TEXTEDIT->GET_TEXT_AS_R3TABLE
  IMPORTING
    TABLE = GT_TLINE.

"변경된 Long Text 내역 라인데이터로 변환
IF GO_TEXTEDIT IS NOT INITIAL.
  CLEAR : GT_TLINE.

  "qwer
  "asdf -> 이렇게 입력 시 LT_TLINE에 1라인의 데이터만 입력 (엔터변환)
  "--> qwer##asdf
  CALL METHOD GO_TEXTEDIT->GET_TEXT_AS_STREAM
    IMPORTING
      TEXT                   = GT_TLINE
      IS_MODIFIED            = LV_MODI
    EXCEPTIONS
      ERROR_DP               = 1
      ERROR_CNTL_CALL_METHOD = 2
      OTHERS                 = 3.
ENDIF.

"CBO 사용키 값 적용 -> SE75 등록 데이터
LV_TDOBJ = 'CBO_1001'.

"사용 object Header 정보 입력
DATA(LS_HEADER) = VALUE THEAD( TDOBJECT = 'ZCBO'
                               TDNAME   = LV_TDOBJ
                               TDID     = 'ZCB1'
                               TDSPRAS  = SY-LANGU ).

"저장가능한 구조로 변환
CALL FUNCTION 'CONVERT_STREAM_TO_ITF_TEXT'
  EXPORTING
    LANGUAGE    = SY-LANGU
  TABLES
    TEXT_STREAM = GT_TLINE
    ITF_TEXT    = LT_TLINE_EX.

"Long Text 저장
CALL FUNCTION 'SAVE_TEXT'
  EXPORTING
    HEADER   = LS_HEADER
  TABLES
    LINES    = LT_TLINE_EX
  EXCEPTIONS
    ID       = 1
    LANGUAGE = 2
    NAME     = 3
    OBJECT   = 4
    OTHERS   = 5.

 


 

🎯 정리


 사용전 등록 사항

  • SE75에 OBJECT , ID 등록
  • 매핑할 NAME에 대한 사용자 정의

CBO에서 Long Text를 등록할 때

  • SAVE_TEXT 사용
  • 특정 OBJECT, ID, NAME으로 저장

CBO에서 메시지를 출력할 때

  • READ_TEXT 사용하여 불러오기

CBO에서 Long Text를 활용하면 동적인 메시지 처리가 가능하며, 표준 메시지보다 유연하게 사용할 수 있습니다. 🚀

 

감사합니다.