SAP中长文本的需求及处理方法
相关类 CL_GUI_TEXTEDIT
主要方法 CL_GUI_TEXTEDIT->GET_TEXT_AS_R3TABLE
CL_GUI_TEXTEDIT->SET_TEXT_AS_R3TABLE
CL_GUI_TEXTEDIT->SET_TEXT_AS_STREAM
CL_GUI_TEXTEDIT->GET_TEXT_AS_STREAM
CALL FUNCTION 'CONVERT_STREAM_TO_ITF_TEXT'
'SAVE_TEXT' " 保存长文本信息
'READ_TEXT' " 读取长文本信息
'CONVERT_ITF_TO_STREAM_TEXT'
一、SAP中所有的长文本都存在两张表中:
STXH 长文本的抬头信息
STXL 长文本的明细信息
但是长文本在使用前,需要先在视图V_TTXIDI和视图V_TTXOBI中进行配置。
1. SE16维护视图V_TTXOBI
2. SE16维护视图V_TTXIDI
3.插入数据后可以去查看表 STXH 长文本的抬头信息
4. 插入数据后可以去查看表 STXL 长文本的明细信息
二,配置完后进行具体读写等
1.变量声明
DATA GO_PARENT TYPE REF TO CL_GUI_CUSTOM_CONTAINER .
DATA GO_TEXTEDIT TYPE REF TO CL_GUI_TEXTEDIT .
DATA: LINES TYPE STANDARD TABLE OF TLINE,
IT_LINE TYPE TABLE OF LINE,
IT_LINE1 TYPE TABLE OF LINE,
IT_LINE2 TYPE TABLE OF LINE,
HEADER LIKE THEAD. "定义内表对长文本保存
CONSTANTS: C_LINE_LENGTH TYPE I VALUE 256 .
"自定义方式
TYPES: BEGIN OF GTY_TEXT,
LINE(C_LINE_LENGTH) TYPE C,
END OF GTY_TEXT.
DATA GT_TEXT_SAVE TYPE STANDARD TABLE OF GTY_TEXT ."定义内表对长文本保存
2.实例化对象,此类的构造方法和CL_GUI_ALV_GRID 一样也需要放置一个容器 , 初始化长文本
FORM CREATE_TEXTEDIT TABLES PPT_LINE LIKE IT_LINE
USING PO_PARENT TYPE REF TO CL_GUI_CUSTOM_CONTAINER
P_CON TYPE CHAR10
CHANGING PO_TEXTEDIT TYPE REF TO CL_GUI_TEXTEDIT
.
DATA PT_LINE TYPE TABLE OF LINE.
PT_LINE[] = PPT_LINE[].
IF PO_PARENT IS INITIAL.
CREATE OBJECT PO_PARENT
EXPORTING
CONTAINER_NAME = P_CON.
CREATE OBJECT PO_TEXTEDIT
EXPORTING
WORDWRAP_MODE = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION
WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>TRUE
PARENT = PO_PARENT.
CALL METHOD PO_TEXTEDIT->SET_STATUSBAR_MODE
EXPORTING
STATUSBAR_MODE = 0
EXCEPTIONS
ERROR_CNTL_CALL_METHOD = 1
INVALID_PARAMETER = 2
OTHERS = 3.
CALL METHOD PO_TEXTEDIT->SET_TOOLBAR_MODE
EXPORTING
TOOLBAR_MODE = 0
EXCEPTIONS
ERROR_CNTL_CALL_METHOD = 1
INVALID_PARAMETER = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
3. 长文本的保存:
FORM SAVE_COMPANYDATAS USING PS_COMPANY_CNO LIKE GS_COMPANY-COMNO
P_CONNAME TYPE CHAR20
PO_TEXTEDIT TYPE REF TO CL_GUI_TEXTEDIT .
DATA P_TDNAME LIKE HEADER-TDNAME .
P_TDNAME = PS_COMPANY_CNO && '_' && P_CONNAME .
* REFRESH IT_LINE.
REFRESH IT_LINE .
CALL METHOD PO_TEXTEDIT->GET_TEXT_AS_STREAM
IMPORTING
TEXT = IT_LINE.
*--长文本保存
HEADER-TDOBJECT = 'ZSTU_COMP'. "object
HEADER-TDNAME = P_TDNAME.
HEADER-TDID = 'LTXT'.
HEADER-TDSPRAS = SY-LANGU.
CALL FUNCTION 'CONVERT_STREAM_TO_ITF_TEXT'
EXPORTING
LANGUAGE = SY-LANGU
TABLES
TEXT_STREAM = IT_LINE
ITF_TEXT = LINES.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
HEADER = HEADER
SAVEMODE_DIRECT = 'X'
TABLES
LINES = LINES
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
OBJECT = 4
OTHERS = 5.
CLEAR HEADER.
REFRESH: LINES ,IT_LINE.
ENDFORM.
4.长文本展示
FORM SHOW_LTXTDATAS USING VALUE(P_TDOBJECT)
PS_COMPANY_CNO LIKE GS_COMPANY-CNO
VALUE(P_CONNAME)
CHANGING PO_TEXTEDIT TYPE REF TO CL_GUI_TEXTEDIT
PT_LINE LIKE IT_LINE.
DATA P_TDNAME LIKE HEADER-TDNAME .
P_TDNAME = PS_COMPANY_CNO && '_' && P_CONNAME .
HEADER-TDOBJECT = P_TDOBJECT. "object
HEADER-TDNAME = P_TDNAME.
HEADER-TDID = 'LTXT'.
HEADER-TDSPRAS = SY-LANGU.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = HEADER-TDID
LANGUAGE = SY-LANGU
NAME = HEADER-TDNAME
OBJECT = HEADER-TDOBJECT
TABLES
LINES = LINES
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
EXPORTING
LANGUAGE = SY-LANGU
TABLES
ITF_TEXT = LINES
TEXT_STREAM = PT_LINE.
CALL METHOD PO_TEXTEDIT->SET_STATUSBAR_MODE
EXPORTING
STATUSBAR_MODE = 0.
CALL METHOD PO_TEXTEDIT->SET_TOOLBAR_MODE
EXPORTING
TOOLBAR_MODE = 0.
CALL METHOD PO_TEXTEDIT->SET_TEXT_AS_STREAM
EXPORTING
TEXT = PT_LINE.
IF GV_DISPLAY EQ GC_X.
CALL METHOD PO_TEXTEDIT->SET_READONLY_MODE
EXPORTING
READONLY_MODE = '1'.
ELSE.
CALL METHOD PO_TEXTEDIT->SET_READONLY_MODE
EXPORTING
READONLY_MODE = '0'.
ENDIF.
IF R_AR NE GC_X.
CALL METHOD GO_TEXTEDIT->SET_READONLY_MODE
EXPORTING
READONLY_MODE = '1'.
ENDIF.
ENDFORM.
5. GET_TEXT_AS_R3TABLE
CALL METHOD GO_TEXTEDIT->GET_TEXT_AS_R3TABLE
IMPORTING
TABLE = GT_TEXTSAVE .
CALL METHOD CL_GUI_CFW=>FLUSH .
6.释放.
IF GO_TEXTEDIT IS NOT INITIAL.
CALL METHOD GO_TEXTEDIT->FREE .
FREE GO_TEXTEDIT.
ENDIF.
CALL METHOD CL_GUI_CFW=>FLUSH .