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_TTXOBI
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 .