(ABAP 기초) Long Text 사용
롱 텍스트
Text editor를 사용하여 유저의 인풋을 받고 STXH(STXD SAPscript text file header) 테이블에 저장한다. 따라서, 저장된 텍스트를 다시 불러올 수도 있다.
SE75에서 텍스트 오브젝트를 먼저 생성하자!
- 텍스트 오브젝트와 ID를 생성합시다.
프로그래밍 시작!!
※ 필요한 변수
DATA: e_header LIKE thead,
text_tab TYPE g_text_t,
e_lines TYPE tline OCCURS 0 WITH HEADER LINE,
e_line LIKE LINE OF E_LINES,
e_number(10) TYPE n.
1. 스크린 페인터에서 스크린 생성 후, 컨테이너 지정 /
컨테이너 및 그리드 생성
CREATE OBJECT GO_CONTAINER_440
EXPORTING
container_name = 'TEXTEDIT'.
ENDIF.
* Text grid가 생성되어 있다면, 초기화 시킨 후 다시 생성
* 초기화 시키지 않으면 기존에 입력된 데이터가 유지되기 때문.
IF GO_GRID_TEXT IS NOT INITIAL.
CALL METHOD GO_GRID_TEXT->FREE.
ENDIF.
* Text grid 다시 생성
CREATE OBJECT GO_GRID_TEXT
EXPORTING
PARENT = GO_CONTAINER_440
WORDWRAP_MODE =
CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION
WORDWRAP_POSITION = 100
WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>TRUE.
* TEXT_TAB( 텍스트 저장 테이블 )에 있는 데이터를 STREAM 으로...?
IF TEXT_TAB IS NOT INITIAL.
CALL METHOD GO_GRID_TEXT->SET_SELECTED_TEXT_AS_STREAM
EXPORTING
SELECTED_TEXT = TEXT_TAB[].
ENDIF.
** 조회모드
* CALL METHOD GO_GRID2->SET_READONLY_MODE
* EXPORTING
* READONLY_MODE = 1.
* 수정모드
CALL METHOD GO_GRID_TEXT->SET_READONLY_MODE
EXPORTING
READONLY_MODE = 0.
2. 입력받은 텍스트를 DB에 저장
DATA: ls_text TYPE zted15_rate.
CLEAR: e_lines, e_header.
e_header-tdobject = 'ZED15_RATE'.
e_header-tdid = 'Z01'.
e_header-tdspras = sy-langu.
PERFORM text_init.
PERFORM get_text_from_editor.
* STXH 테이블 저장할 수 있는 포멧으로 변경
CALL FUNCTION 'CONVERT_STREAM_TO_ITF_TEXT'
TABLES
text_stream = text_tab
itf_text = e_lines.
* E_LINES 에 저장된 텍스트를 E_HEADER의 정보 기준으로 저장
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
header = e_header
savemode_direct = 'X'
TABLES
lines = e_lines.
FORM text_init .
* TDNAME 에 붙일 번호 채번
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '01'
object = 'ZNED15_RAT'
IMPORTING
number = e_number.
* 채번 앞에 0 붙임.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = e_number
IMPORTING
output = e_number.
* TDNAME 만들기
CONCATENATE e_header-tdobject e_header-tdid e_number
INTO e_header-tdname.
* Initialize test work areas
CALL FUNCTION 'INIT_TEXT'
EXPORTING
id = e_header-tdid
language = sy-langu
name = e_header-tdname
object = e_header-tdobject
IMPORTING
header = e_header
TABLES
lines = e_lines.
ENDFORM.
FORM get_text_from_editor .
CLEAR: e_lines, text_tab.
* Initialize test work areas
CALL METHOD go_grid_text->get_text_as_stream
IMPORTING
text = text_tab
EXCEPTIONS
error_dp = 1
error_cntl_call_method = 2
OTHERS = 3.
ENDFORM.
3. 텍스트 읽고 테이블에 저장
* 텍스트 오브젝트 할당
e_header-tdobject = 'ZED15_RATE'.
e_header-tdid = 'Z01'.
e_header-tdspras = sy-langu.
* 평가 테이블에서 가져온 데이터로 Loop
LOOP AT lt_rate INTO ls_rate.
e_header-tdname = ls_rate-tdname. " TDNAME 가져오기 ( 텍스트 객체 이름 ) - 후기가 저장되어있는..
* 텍스트 읽어서, E_LINES 테이블에 저장
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = e_header-tdid
language = sy-langu
name = e_header-tdname
object = e_header-tdobject
IMPORTING
header = e_header
TABLES
lines = e_lines.
gs_review-review = e_line-tdline.
gs_review-bname = ls_rate-bname.
gs_review-category = ls_rate-category.
gs_review-food_name = ls_rate-food_name.
gs_review-rate = ls_rate-rate.
gs_review-radat = ls_rate-radat.
gs_review-ratim = ls_rate-ratim.
LOOP AT E_LINES INTO E_LINE.
CONCATENATE GS_REVIEW-REVIEW E_LINE-TDLINE ` ` INTO GS_REVIEW-REVIEW.
CLEAR: E_LINE.
ENDLOOP.
APPEND gs_review TO gt_review.
* 변수 초기화
CLEAR: gs_menu, gs_review, e_line, e_lines[], e_header-tdname.
ENDLOOP.