实现效果
1、创建文本对象
T-CODE:SE75
2、绘制表控件
在屏幕内绘制表控件 并命名
3、初始化表控件
在PBO中对容器进行初始化,也就是前面的表控件。
* 创建容器
CREATE OBJECT CUSTOM_CONTAINER1
EXPORTING
CONTAINER_NAME = 'CONTAINER_9000' "容器(表控件)名
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE 'I'
NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT EDITOR1
EXPORTING
WORDWRAP_MODE = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION
WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>TRUE
PARENT = CUSTOM_CONTAINER1
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
GUI_TYPE_NOT_SUPPORTED = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE 'I'
NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
对容器的其他操作
* 去掉状态栏
CALL METHOD EDITOR1->SET_STATUSBAR_MODE
EXPORTING
STATUSBAR_MODE = CL_GUI_TEXTEDIT=>FALSE.
* 去掉工具栏
CALL METHOD EDITOR1->SET_TOOLBAR_MODE
EXPORTING
TOOLBAR_MODE = CL_GUI_TEXTEDIT=>FALSE.
* 文本框不可编辑
CALL METHOD EDITOR1->SET_READONLY_MODE
EXPORTING
READONLY_MODE = '1'
EXCEPTIONS
ERROR_CNTL_CALL_METHOD = 1
INVALID_PARAMETER = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID
TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
4、数据定义
DATA:
* Create reference to the custom container
CUSTOM_CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
* Create reference to the TextEdit control
EDITOR1 TYPE REF TO CL_GUI_TEXTEDIT,
LINES TYPE STANDARD TABLE OF TLINE,
HEADER TYPE THEAD,
TEXTTABLE TYPE TABLE OF TEXTLINE.
文本名可以理解为每个长文本的KEY,是独一无二的,保存和读取长文本的时候根据文本名来区分不同长文本
HEADER-TDOBJECT = 'ZMM002_TXT'. "文本对象
HEADER-TDNAME = GS_HEADER-EBELN."文本名
HEADER-TDID = 'ZT01'. "文本ID
HEADER-TDSPRAS = 1. "语言
L_THEAD-TDID = 'ZT01'.
L_THEAD-TDSPRAS = '1'.
L_THEAD-TDNAME = GS_HEADER-EBELN.
L_THEAD-TDOBJECT = 'ZMM002_TXT' .
5、创建行项目文本
*数据定义
FIELD-SYMBOLS <FS> TYPE REF TO CL_GUI_TEXTEDIT.
FIELD-SYMBOLS <FS2> TYPE I.
DATA : LT_TABLE TYPE STANDARD TABLE OF TDLINE,
L_MODI TYPE I,
LT_TLINES TYPE TABLE OF TLINE,
LS_TLINES TYPE TLINE,
L_THEAD TYPE THEAD.
ASSIGN 'EDITOR1' TO <FS>.
* 获取长文本输入框的内容
CALL METHOD <FS>->GET_TEXT_AS_R3TABLE
IMPORTING
TABLE = LT_TABLE
IS_MODIFIED = L_MODI
EXCEPTIONS
ERROR_DP = 1
ERROR_CNTL_CALL_METHOD = 2
ERROR_DP_CREATE = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSEIF L_MODI = 1.
* 调用方法创建保存文本对象
CALL FUNCTION 'CREATE_TEXT'
EXPORTING
FID = L_THEAD-TDID
FLANGUAGE = L_THEAD-TDSPRAS
FNAME = L_THEAD-TDNAME
FOBJECT = L_THEAD-TDOBJECT
TABLES
FLINES = LT_TLINES
EXCEPTIONS
NO_INIT = 1
NO_SAVE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
6、读取文本
* 读取文本对象的文本
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = HEADER-TDID
LANGUAGE = HEADER-TDSPRAS
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.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* 转换文本流
CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
EXPORTING
LANGUAGE = SY-LANGU
TABLES
ITF_TEXT = LINES
TEXT_STREAM = TEXTTABLE.
* 将取到的文本写入画面的文本框中
CALL METHOD EDITOR1->SET_TEXT_AS_STREAM
EXPORTING
TEXT = TEXTTABLE
EXCEPTIONS
ERROR_DP = 1
ERROR_DP_CREATE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
7、实例代码
PROCESS BEFORE OUTPUT.
MODULE STATUS_9000.
MODULE MD_INIT_9000.
* MODULE READTXT_9000.
MODULE STATUS_9000 OUTPUT.
SET PF-STATUS 'TOOLBAR_9000'.
SET TITLEBAR 'TITLEBAR_9000'.
ENDMODULE.
新建GUI状态"TOOLBAR_9000" 和 GUI标题 “TITLEBAR_9000”
MODULE USER_COMMAND_9000 INPUT.
DATA:OK_CODE LIKE SY-UCOMM,
MY_CODE LIKE SY-UCOMM.
MY_CODE = OK_CODE.
CLEAR OK_CODE.
CASE MY_CODE.
WHEN '&BACK'.
LEAVE TO SCREEN 0.
WHEN '&SAVE'. "自定义的保存按钮
PERFORM SAVE_TEXTEDITOR USING 'EDITOR1' 'ZMM001_TXT'.
PERFORM FRM_UCOMM_SAVE.
WHEN ''. "回车键
PERFORM FRM_UCOMM_ENTER.
ENDCASE.
ENDMODULE.
设置用户命令的时候首先在屏幕逻辑流中命名
FORM SAVE_TEXTEDITOR USING VALUE(P_0057)
VALUE(P_0058).
FIELD-SYMBOLS <FS> TYPE REF TO CL_GUI_TEXTEDIT.
FIELD-SYMBOLS <FS2> ##NEEDED
TYPE I.
DATA : LT_TABLE TYPE STANDARD TABLE OF TDLINE,
L_MODI TYPE I,
LT_TLINES TYPE TABLE OF TLINE,
LS_TLINES TYPE TLINE,
L_THEAD TYPE THEAD.
ASSIGN (P_0057) TO <FS>.
HEADER-TDOBJECT = 'ZMM001_TXT'. "文本对象
HEADER-TDNAME = GS_HEADER-EBELN."文本名
HEADER-TDID = 'ZT01'. "文本ID
HEADER-TDSPRAS = 1. "语言
* 获取长文本输入框的内容
CALL METHOD <FS>->GET_TEXT_AS_R3TABLE
IMPORTING
TABLE = LT_TABLE
IS_MODIFIED = L_MODI
EXCEPTIONS
ERROR_DP = 1
ERROR_CNTL_CALL_METHOD = 2
ERROR_DP_CREATE = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSEIF L_MODI = 1.
LOOP AT LT_TABLE INTO LS_TLINES-TDLINE.
APPEND LS_TLINES TO LT_TLINES.
ENDLOOP.
L_THEAD-TDID = 'ZT01'.
L_THEAD-TDSPRAS = '1'.
L_THEAD-TDNAME = GS_HEADER-EBELN.
L_THEAD-TDOBJECT = P_0058 .
* 调用方法创建保存文本对象
CALL FUNCTION 'CREATE_TEXT'
EXPORTING
FID = L_THEAD-TDID
FLANGUAGE = L_THEAD-TDSPRAS
FNAME = L_THEAD-TDNAME
FOBJECT = L_THEAD-TDOBJECT
TABLES
FLINES = LT_TLINES
EXCEPTIONS
NO_INIT = 1
NO_SAVE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
* 读取文本对象的文本
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = HEADER-TDID
LANGUAGE = HEADER-TDSPRAS
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.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* 转换文本流
CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
EXPORTING
LANGUAGE = SY-LANGU
TABLES
ITF_TEXT = LINES
TEXT_STREAM = TEXTTABLE.
* 将取到的文本写入画面的文本框中
CALL METHOD EDITOR1->SET_TEXT_AS_STREAM
EXPORTING
TEXT = TEXTTABLE
EXCEPTIONS
ERROR_DP = 1
ERROR_DP_CREATE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
* 将取到的文本写入画面的文本框中
CALL METHOD EDITOR1->SET_TEXT_AS_STREAM
EXPORTING
TEXT = TEXTTABLE
EXCEPTIONS
ERROR_DP = 1
ERROR_DP_CREATE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.