说明:和上一篇帖子(ABAP 交货单行项目屏幕增强_weixin_49689040的博客-CSDN博客)是一起的,在其基础之上增加长文本框。
一、在屏幕创建容器
容器名称:CON_9001
二、定义容器及其他变量
DATA : custom_container1 TYPE REF TO cl_gui_custom_container,
editor1 TYPE REF TO cl_gui_textedit,
lines TYPE STANDARD TABLE OF tline,
header TYPE thead,
texttable TYPE TABLE OF textline.
在PBO初始化模块添加代码
* 创建容器
create object custom_container1
exporting
container_name = 'CONTAINER_9001' "容器(表控件)名
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.
* 文本框不可编辑
IF gv_trtyp EQ 'A'."显示
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.
ENDIF .
这时长文本框已经出来了,但是不能存表啥的,我们需要在进一步处理
三、SE75创建文本对象
之后保存
由于是在屏幕增强中写的,创建完文本对象后,我们要在PBO的时候读取文本对象,写入屏幕中,在PAI的时候创建位版本对象,保存数据
四、在PBO INIT_DATA初始化模块添加读取文本对象,放置屏幕的逻辑
* 读取文本对象的文本
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = 'ZT01'"header-tdid
language = '1'"header-tdspras
name = '123123123'"header-tdname
object = 'ZSD001_TXT'"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.
五、在PAI SAVE_READTXT模块添加保存文本对象的逻辑
MODULE save_readtxt INPUT.
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 ('EDITOR1') TO <fs>.
header-tdobject = 'ZSD001_TXT'. "文本对象
header-tdname = '123123123'."文本名
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 = '123123123'.
l_thead-tdobject = 'ZSD001_TXT' .
* 调用方法创建保存文本对象
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.
ENDMODULE.
完成代码(和正常字段增强一起)
屏幕
包含文件:LZFG_VL01N_ITEMO01
*----------------------------------------------------------------------*
***INCLUDE LZFG_VL01N_ITEMO01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module INTI_DATA OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE init_data OUTPUT.
IF gv_trtyp EQ 'A'."显示
LOOP AT SCREEN .
screen-input = 0 .
MODIFY SCREEN .
ENDLOOP.
ELSEIF gv_trtyp EQ 'V' OR gv_trtyp EQ 'H'.
LOOP AT SCREEN .
screen-input = 1 .
MODIFY SCREEN .
ENDLOOP.
ENDIF.
* 创建容器
CREATE OBJECT custom_container1
EXPORTING
container_name = 'CON_9001' "容器(表控件)名
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.
* 文本框不可编辑
IF gv_trtyp EQ 'A'."显示
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.
ENDIF .
* 读取文本对象的文本
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = 'ZT01'"header-tdid
language = '1'"header-tdspras
name = '123123123'"header-tdname
object = 'ZSD001_TXT'"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.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SAVE_READTXT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE save_readtxt INPUT.
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 ('EDITOR1') TO <fs>.
header-tdobject = 'ZSD001_TXT'. "文本对象
header-tdname = '123123123'."文本名
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 = '123123123'.
l_thead-tdobject = 'ZSD001_TXT' .
* 调用方法创建保存文本对象
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.
ENDMODULE.
包含文件:LZFG_VL01N_ITEMTOP
FUNCTION-POOL zfg_vl01n_item. "MESSAGE-ID ..
* INCLUDE LZFG_VL01N_ITEMD... " Local class definition
* INCLUDE LZFG_VL01N_ITEMD... " Local class definition
DATA:gs_info_tab TYPE lips.
DATA:gv_trtyp TYPE trtyp.
TABLES :lips.
DATA : custom_container1 TYPE REF TO cl_gui_custom_container,
editor1 TYPE REF TO cl_gui_textedit,
lines TYPE STANDARD TABLE OF tline,
header TYPE thead,
texttable TYPE TABLE OF textline.
包含文件 : LZFG_VL01N_ITEMUXX(创建完函数模块自动生成)
*****************************************************************
* THIS FILE IS GENERATED BY THE FUNCTION LIBRARY. *
* NEVER CHANGE IT MANUALLY, PLEASE! *
*****************************************************************
INCLUDE LZFG_VL01N_ITEMU01.
"ZSD_FM_TRANS_ITEM_TO_SCREEN
INCLUDE LZFG_VL01N_ITEMU02.
"ZFM_GET_DATA_FROM_SCREEN
SE19->ZSD_SHP_TAB_CUST_ITEM