테이블에 해당 데이터를 저장하기가 어려움이 존재할 때, 또는 텍스트 내역에 대한 저장이 엔터와 같은 조판부호가 포함될 경우 사용하기에 용이합니다.
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 프로그램에서 저장하는 방법
SE75에서 오브젝트를 등록합니다. ㄱ) SE75를 실행하여, Text Object 및 ID를 변경으로 조회합니다. SE75 화면 ㄴ) 생성 버튼 클릭 후 텍스트 오브젝트 , 내역, 어플리케이션, 라인너비를 기입 후 확인 버튼을 누릅니다. 생성 화면
아래와 같이 생성됨을 확인할 수 있습니다. 생성 등록 해당 내역을 더블 클릭하여, 들어가면 텍스트 ID에 대한 등록이 나옵니다. 하위 오브젝트의 개념으로 보시면 됩니다. 앞서 하신 등록과 마찬가지로 하위 내역 생성하시면 됩니다. 텍스트 ID 생성 등록 후 아래의 저장버튼을 클릭하여 CTS Object를 반드시 묶어주어야 합니다. CTS Object 등록
생성 CTS Object 확인 해당 CTS를 이관하여 처리할 수 있습니다.
1번의 Long text 등록 Function을 통해 저장을 수행합니다.
아래와 같이 입력하여 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를 활용하면 동적인 메시지 처리가 가능하며, 표준 메시지보다 유연하게 사용할 수 있습니다. 🚀