ABAP屏幕多行文本框使用(CL_GUI_TEXTEDIT) ABAPSAPABAP屏幕
- 创建时间:2023-10-15 / 最新修改时间:2023-10-16 08:55:37
- 13845
- 1
转载请注明本文出处:http://limpire.cn/artifact/heap/sap/223.html
ABAP屏幕多行文本框使用(CL_GUI_TEXTEDIT)
ABAP自画屏幕只有普通当行文本控件,如果需要多行的文本框控件则需要添加CCtrl
客户自定义控件容器,然后把长文本控件注册进去.这跟OOALV很像.
实现步骤
大概步骤如下:
- 在屏幕中画出客户自定义控件容器.
- 程序中定义
cl_gui_custom_container
引用变量,创建对象并通过构造器参数与自定义控件容器关联.- 程序中定义
cl_gui_textedit
引用变量,创建对象并通过构造器参数指定父容器cl_gui_custom_container
.- 新建单列内表用于读写
cl_gui_textedit
.通过cl_gui_textedit
的set_text_as_r3table
和set_text_as_r3table
指定内表进行读写.
行动
画出用户自定义控件容器,并记住容器名字PARAM
数据变量定义
程序头中编写以下代码片段:
REPORT zdm_rest_gui_test.
DATA long_text_container TYPE REF TO cl_gui_custom_container. "屏幕用户控件引用变量
DATA editor TYPE REF TO cl_gui_textedit. " 控件类引用
"定义单列内标用户长文本空间的读与写
DATA:init,
m1(256) TYPE c OCCURS 0,
line(256) TYPE c.
PBO
在 PBO模块中写如下代码片段,主要是初始化对象和设置长文本默认值:
IF init IS INITIAL.
init = 'X'.
"创建自定义区域对象
CREATE OBJECT long_text_container
EXPORTING
container_name = 'PARAM'. "对应的是画自定义容器时定义的容器名字
" 创建长文本控件对象
CREATE OBJECT editor
EXPORTING
parent = long_text_container "这只父容器,即使自定义容器
wordwrap_mode = cl_gui_textedit=>wordwrap_at_fixed_position
wordwrap_position = 256 "每行最大字符数量,超出自动换行
wordwrap_to_linebreak_mode = cl_gui_textedit=>true.
"设置长文本控件默认内容,
APPEND '{' TO m1.
APPEND ' "REPORTPARAM": {' TO m1.
APPEND ' "VP_A": "20231001",' TO m1.
APPEND ' "VP_B": "20231010"' TO m1.
APPEND ' },' TO m1.
APPEND ' "VARREPORTID": "1582617486826115074"' TO m1.
APPEND '}' TO m1.
"设置默认值到长文本控件
CALL METHOD editor->set_text_as_r3table
EXPORTING
table = m1.
ENDIF.
PAI
在PAI模块中有如下代码片段,主要用于读取长文本控件的内容.
REFRESH m1.
CALL METHOD editor->get_text_as_r3table "获取数据到内表中
IMPORTING
table = m1.
完整代码
REPORT zdm_rest_gui_test.
DATA long_text_container TYPE REF TO cl_gui_custom_container. "屏幕用户控件引用变量
DATA editor TYPE REF TO cl_gui_textedit. " 控件类引用
DATA:init,
m1(256) TYPE c OCCURS 0,
line(256) TYPE c.
"界面字段
DATA: title(20) TYPE c,
java_class(50) TYPE c,
java_method(50) TYPE c,
param TYPE REF TO object,
mark(50) TYPE c,
s_title TYPE string,
s_java_class TYPE string,
s_java_method TYPE string,
s_mark TYPE string,
param_data TYPE REF TO Data.
START-OF-SELECTION.
CALL SCREEN 0100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'ZDMSTSTUS0100'.
SET TITLEBAR 'ZDMTITLE0100'.
*& 长文本控件注册
IF init IS INITIAL.
init = 'X'.
"创建自定义区域对象
CREATE OBJECT long_text_container
EXPORTING
container_name = 'PARAM'.
" 创建长文本控件对象
CREATE OBJECT editor
EXPORTING
parent = long_text_container
wordwrap_mode = cl_gui_textedit=>wordwrap_at_fixed_position
wordwrap_position = 256
wordwrap_to_linebreak_mode = cl_gui_textedit=>true.
"设置json默认值
APPEND '{' TO m1.
APPEND ' "REPORTPARAM": {' TO m1.
APPEND ' "VP_A": "20231001",' TO m1.
APPEND ' "VP_B": "20231010"' TO m1.
APPEND ' },' TO m1.
APPEND ' "VARREPORTID": "1582617486826115074"' TO m1.
APPEND '}' TO m1.
"设置默认值到长文本控件
CALL METHOD editor->set_text_as_r3table
EXPORTING
table = m1.
ENDIF.
"默认数据
title = 'Rest报表测试'.
java_class = 'VARIABLEH5REPORTSERVER'.
java_method = 'H5'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
data temp_p type string.
REFRESH m1.
CALL METHOD editor->get_text_as_r3table "获取数据”
IMPORTING
table = m1.
CASE sy-ucomm.
WHEN 'BTN1'.
s_title = title .
s_java_class = java_class .
s_java_method = java_method .
s_mark = mark .
CLEAR param_data.
PERFORM table2String USING m1 changing temp_p.
/ui2/cl_json=>deserialize(
EXPORTING
json = temp_p
CHANGING
data = param_data
).
zdm_rest_exec=>send(
EXPORTING
title = s_title
java_class = s_java_class
java_method = s_java_method
param_tab = param_data
crete_by = `Test`
mark = s_mark
).
WHEN 'BTNFM'.
zdm_rest_exec=>open(
EXPORTING
url = `http://xxxxxx:8083/manager/dataintegrationlist`
param = `数据集成管理`
).
WHEN 'BTNRPM'.
zdm_rest_exec=>open(
EXPORTING
url = `http://xxxxxxx:8083/manager/varReportListView`
param = `报表配置管理`
).
WHEN 'BACK' .
LEAVE TO SCREEN 0.
WHEN 'CANCEL' .
LEAVE PROGRAM.
WHEN 'EXIT' .
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
FORM table2String USING t like m1 CHANGING rtv TYPE string.
DATA line(256) TYPE c.
DATA r TYPE string.
IF t IS NOT INITIAL.
LOOP AT t INTO line.
r = | { r } { cl_abap_char_utilities=>cr_lf } { line } |.
ENDLOOP.
ENDIF.
rtv = r.
ENDFORM.
最终效果:
PS : 关于何为屏幕 PBO 和 PAI.
我们可以理解为PBO 和 PAI 都是屏幕程序中生命周期的一个回调模块.
PBO 在显示屏幕前回调.
PAI 在响应任何功能键时回调.就是所谓的
user_command_0100