在很多功能开发中,要开发人员自己画屏幕,有时候有这样的需求,就是用户要输入文本,就要做一个类似script的控件,做法如下:
1、屏幕上先做一个‘定制控制’的控件,名字是ZRXM
2、定义变量如下:
DATA: customer_zrxm TYPE REF TO
cl_gui_custom_container.
DATA: edit_zrxm TYPE REF TO cl_gui_textedit.
DATA: text_zrxm TYPE TABLE OF mystruc.
DATA:wa_text_zrxm LIKE LINE OF text_zrxm.
DATA: wa_thead_zr LIKE thead.
DATA: mytable_zr TYPE TABLE OF tline .
DATA: wa_mytable_zr LIKE tline.
DATA: modi_zr TYPE i.
3、PBO代码如下:
IF edit_zrxm IS INITIAL.
*创建对象customer_container.和屏幕上的MYCON区域关联
CREATE OBJECT customer_zrxm
EXPORTING
container_name = 'ZRXM'.
*创建文本编辑对象,
CREATE OBJECT edit_zrxm
EXPORTING
parent = customer_zrxm
wordwrap_mode = cl_gui_textedit=>wordwrap_at_fixed_position
wordwrap_position = 90
wordwrap_to_linebreak_mode = cl_gui_textedit=>true.
ENDIF.
IF g_flag_9001 = 'D' . "显示
CALL METHOD edit_zrxm->set_readonly_mode
EXPORTING
readonly_mode = 1.
ELSE. "修改或者新增
CALL METHOD edit_zrxm->set_readonly_mode
EXPORTING
readonly_mode = 0.
ENDIF.
*调用方法set_text_as_r3table把内表内容填到文本编辑框中
CALL METHOD edit_zrxm->set_text_as_r3table
EXPORTING
table = text_zrxm
EXCEPTIONS
OTHERS = 1.
*把缓存中的内容送到前台。
CALL METHOD cl_gui_cfw=>flush.
4、PAI代码如下:
REFRESH text_zrxm.
CALL METHOD edit_zrxm->get_text_as_r3table
IMPORTING
table = text_zrxm
is_modified = modi_zr.
5、保存代码如下:
CLEAR wa_thead_zr.
wa_thead_zr-tdobject = 'ZR8LIFNR'.
wa_thead_zr-tdname = zr8mms020-lifnr.
wa_thead_zr-tdid = 'ZRXM'.
wa_thead_zr-tdspras = sy-langu.
REFRESH mytable_zr.
LOOP AT text_zrxm INTO wa_text_zrxm.
wa_mytable_zr-tdline = wa_text_zrxm-line.
APPEND wa_mytable_zr TO mytable_zr.
ENDLOOP.
PERFORM sub_save_text TABLES mytable_zr USING wa_thead_zr .
FORM sub_save_text TABLES p_mytable STRUCTURE tline
USING p_wa_thead LIKE thead.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
header = p_wa_thead
savemode_direct = 'X'
TABLES
lines = p_mytable
EXCEPTIONS
id = 1
language = 2
name = 3
object = 4
OTHERS = 5.
ENDFORM. " sub_save_text
6、读取代码如下:
REFRESH mytable_zr.
CLEAR wa_thead_zr.
wa_thead_zr-tdobject = 'ZR8LIFNR'.
wa_thead_zr-tdname = gt_display-lifnr.
wa_thead_zr-tdid = 'ZRXM'.
wa_thead_zr-tdspras = sy-langu.
PERFORM sub_read_text TABLES mytable_zr USING wa_thead_zr.
REFRESH text_zrxm.
LOOP AT mytable_zr INTO wa_mytable_zr .
wa_text_zrxm-line = wa_mytable_zr-tdline.
APPEND wa_text_zrxm TO text_zrxm.
ENDLOOP.
FORM sub_read_text TABLES p_mytable STRUCTURE tline
USING p_wa_thead LIKE thead.
DATA:ps_header LIKE thead.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = p_wa_thead-tdid
language = p_wa_thead-tdspras
name = p_wa_thead-tdname
object = p_wa_thead-tdobject
IMPORTING
header = ps_header
TABLES
lines = p_mytable
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
ENDFORM. " SUB_READ_TEXT