在ABAP中,我们经常会用到长文本来描述详细信息。
长文本存储在表格:STXH(抬头),STXL(行项目)中。
长文本中有四个关键属性:
object、id、name、langguge
即:
TDOBJECT
TDNAME
TDID
TDSPRAS
其中language不必解释,object 和 id 可以在se75中进行配置,一个object 可以对一个多个ID,比如我们常用的 TEXT + ST
name 一般用对象号。
而对长文本的操作主要是 READ_TEXT 和 SAVE_TEXT
分别实现长文本的读取和写入,例如:
REPORT ZLJC9999.
DATA: TD_NAME LIKE STXH-TDNAME.
DATA ITAB_LINE LIKE TLINE OCCURS 0 WITH HEADER LINE.
TD_NAME = ‘LJC0000001’.
CLEAR ITAB_LINE.
REFRESH ITAB_LINE.
ITAB_LINE-TDLINE = ‘ARE YOU DOG?’. "把多行长文本加在一起
APPEND ITAB_LINE.
DATA:L_THEAD TYPE THEAD.
L_THEAD-TDOBJECT = ‘ZLJC’.
L_THEAD-TDNAME = TD_NAME.
L_THEAD-TDID = ‘SB’.
L_THEAD-TDSPRAS = SY-LANGU.
CALL FUNCTION ‘SAVE_TEXT’
EXPORTING
HEADER = L_THEAD
TABLES
LINES = ITAB_LINE.
COMMIT WORK.
CALL FUNCTION ‘READ_TEXT’
EXPORTING
CLIENT = SY-MANDT
ID = L_THEAD-TDID
LANGUAGE = SY-LANGU
NAME = TD_NAME
OBJECT = L_THEAD-TDOBJECT
TABLES
LINES = ITAB_LINE
EXCEPTIONS
NOT_FOUND = 4.
IF SY-SUBRC = 0.
LOOP AT ITAB_LINE.
WRITE: ITAB_LINE-TDLINE . "把多行长文本加在一起
ENDLOOP.
ENDIF.
一般我们还会提供长文本的录入、编辑、显示界面。这个需要用面向OO的组件。在屏幕上画一个Container。
初始化长文本界面的例子:
DATA:ppcont_desc1 TYPE REF TO cl_gui_custom_container,
ppedit_desc1 TYPE REF TO cl_gui_textedit,
create object: ppcont_desc1 exporting container_name = ‘LONGTEXT1’,
ppedit_desc1 exporting parent = ppcont_desc1.
call method ppedit_desc1->set_toolbar_mode
exporting
toolbar_mode = cl_gui_textedit=>true. "长文本 菜单加载 FALSE 取消菜单
call method ppedit_desc1->set_statusbar_mode
exporting
statusbar_mode = cl_gui_textedit=>false.
call method ppedit_desc1->register_event_dblclick
exporting
appl_event = ‘X’.
call method ppedit_desc1->set_visible
exporting
visible = 'X'.
长文本写到编辑区域的例子:
l_tdid = ‘ST’.
l_tdobject = ‘TEXT’.
refresh: it_tab3[],
text_tab[].
clear it_tab3.
call function ‘READ_TEXT’
exporting
id = l_tdid
language = sy-langu
name = p_tdname
object = l_tdobject
tables
lines = it_tab3
exceptions
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
others = 8.
if sy-subrc <> 0.
endif.
loop at it_tab3.
line = it_tab3-tdline.
append line to text_tab.
endloop.
refresh it_tab3[].
call method ppedit_desc1->set_text_as_r3table
exporting
table = text_tab
- EXCEPTIONS
-
error_dp = 1
-
error_cntl_call_method = 2
-
error_dp_create = 3
-
potential_data_loss = 4
-
refresh text_tab[].OTHERS = 5 .
将界面中的长文本保存的例子:
break ljc.
refresh: text_tab[],
it_tab3.
- CALL METHOD ppedit_desc->get_text_as_r3table
- IMPORTING
-
call method ppedit_desc->get_text_as_r3tabletable = text_tab.
exporting
only_when_modified = ‘’
importing -
exceptionsTEXT = TEXT_TAB. table = text_tab
error_dp = 1
error_cntl_call_method = 2
error_dp_create = 3
potential_data_loss = 4
others = 5.
loop at text_tab into field.
it_tab3-tdline = field.
append it_tab3.
clear: field,it_tab3.
endloop.
**** 保存长文本
l_thead-tdobject = ‘TEXT’.
clear l_thead-tdname. - concatenate ‘PP’ ZPLM090_PP-PPNUM into L_THEAD-TDNAME.
l_thead-tdname = tab_check-objnr.
l_thead-tdid = ‘ST’.
l_thead-tdspras = sy-langu.
call function ‘SAVE_TEXT’
exporting
header = l_thead
tables
lines = it_tab3.
commit work.