Abap 报告选择屏幕参数下方的多个文本行基于表条目
在执行报告之前,我希望在选择屏幕下方显示文件夹。Abap 报告选择屏幕参数下方的多个文本行基于表条目,abap,Abap,在执行报告之前,我希望在选择屏幕下方显示文件夹。 文件夹名称存储在表中。 因为我不知道该表之前有多少个条目,所以需要动态的,而不是硬编码的 这就是我到目前为止所做的: DATA: lt_directories TYPE string_table. DATA: lv_folders_txt TYPE string. "Report description with test-checkbox SELECTION-SCREEN BEGIN OF BLOCK b11 WITH FRAME TITLE
文件夹名称存储在表中。
因为我不知道该表之前有多少个条目,所以需要动态的,而不是硬编码的 这就是我到目前为止所做的:
DATA: lt_directories TYPE string_table.
DATA: lv_folders_txt TYPE string.
"Report description with test-checkbox
SELECTION-SCREEN BEGIN OF BLOCK b11 WITH FRAME TITLE title.
PARAMETERS: pa_test TYPE c AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT /1(20) folders.
SELECTION-SCREEN END OF BLOCK b11.
INITIALIZATION.
lt_directories = VALUE string_table( ( `FOLDER1` ) ( `FOLDER2` ) ( `FOLDER3` ) ( `FOLDER4` ) ).
title = 'This program imports data from the listed folders'.
AT SELECTION-SCREEN OUTPUT.
LOOP AT lt_directories ASSIGNING FIELD-SYMBOL(<directory>).
"TODO: this has to be changed!
lv_folders_txt = lv_folders_txt && <directory>.
ENDLOOP.
folders = lv_folders_txt.
DATA:lt\u目录类型字符串\u表。
数据:lv\U文件夹\U txt类型字符串。
“带有测试复选框的报告说明”
块b11的选择屏幕以帧标题开始。
参数:pa_测试类型c为复选框默认值abap_为真。
选择屏幕注释/1(20)个文件夹。
选择框b11的屏幕末端。
初始化。
lt_directories=VALUE string_table(`FOLDER1`)(`FOLDER2`)(`FOLDER3`)(`FOLDER4`))。
title='此程序从列出的文件夹导入数据'。
在选择屏幕输出时。
在lt_目录处循环分配字段-SYMBOL()。
“TODO:这必须改变!
lv_folders_txt=lv_folders_txt&&。
结束循环。
文件夹=lv\U文件夹\U txt。
结果是这样的:
这是我希望它看起来像什么的一个例子:有人知道这样做的简单方法吗?不幸的是,对于
评论没有这样做的方法。它将始终显示在一行中。即使在末尾使用换行符(或回车符+换行符),也不会得到预期的结果
REPORT ZZZ.
DATA: lt_directories TYPE string_table.
DATA: lv_folders_txt TYPE string.
"Report description with test-checkbox
SELECTION-SCREEN BEGIN OF BLOCK b11 WITH FRAME TITLE title.
PARAMETERS: pa_test TYPE c AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT /1(20) folders.
SELECTION-SCREEN END OF BLOCK b11.
INITIALIZATION.
lt_directories = VALUE string_table( ( `FOLDER1` ) ( `FOLDER2` ) ( `FOLDER3` ) ( `FOLDER4` ) ).
title = 'This program imports data from the listed folders'.
AT SELECTION-SCREEN OUTPUT.
LOOP AT lt_directories ASSIGNING FIELD-SYMBOL(<directory>).
"TODO: this has to be changed!
lv_folders_txt = lv_folders_txt && <directory> && cl_abap_char_utilities=>newline.
ENDLOOP.
folders = lv_folders_txt.
报告ZZZ。
数据:lt\u目录类型字符串\u表。
数据:lv\U文件夹\U txt类型字符串。
“带有测试复选框的报告说明”
块b11的选择屏幕以帧标题开始。
参数:pa_测试类型c为复选框默认值abap_为真。
选择屏幕注释/1(20)个文件夹。
选择框b11的屏幕末端。
初始化。
lt_directories=VALUE string_table(`FOLDER1`)(`FOLDER2`)(`FOLDER3`)(`FOLDER4`))。
title='此程序从列出的文件夹导入数据'。
在选择屏幕输出时。
在lt_目录处循环分配字段-SYMBOL()。
“TODO:这必须改变!
lv_folders_txt=lv_folders_txt&&&cl_abap_char_utilities=>newline。
结束循环。
文件夹=lv\U文件夹\U txt。
您可以在屏幕底部创建一个,并在其中包含任何“文本视图”控件,例如:
DATA:lt\u目录类型字符串\u表。
数据:lv\U文件夹\U txt类型字符串。
数据:进入对接类型参考cl\U gui\U对接容器。
数据:go_html_查看器类型REF到cl_gui_html_查看器。
“带有测试复选框的报告说明”
块b11的选择屏幕以帧标题开始。
参数:pa_测试类型c为复选框默认值abap_为真。
选择框b11的屏幕末端。
初始化。
lt_directories=VALUE string_table(`FOLDER1`)(`FOLDER2`)(`FOLDER3`)(`FOLDER4`))。
title='此程序从列出的文件夹导入数据'。
在选择屏幕输出时。
如果go_对接未绑定。
去对接=新的#(
雷皮
dynnr=sy dynnr
侧面=cl\U gui\U对接\U容器=>底部对接
扩展=180)。“像素
数据:lv_url类型cndp_url。
数据(lv_文本)={
REDUCE#(INIT s=`FOR lt_目录中的dir下一个s={s}{dir}
|)
}|.
go_html_查看器=新的cl_gui_html_查看器(父项=go_停靠)。
数据(soli_选项卡)=cl_bcs_convert=>string_to_soli(lv_文本)。
转到html\u查看器->加载\u数据(
导出类型='text'子类型='html'大小=strlen(lv_text)
导入分配的\u url=lv\u url
更改数据(表=解决方案选项卡)。
进入html浏览器->显示url(url=lv\U url)。
恩迪夫。
如果您不想在运行时生成dynpro或报告。
如果您不想将控件与内容对接。
如果需要显示的条目数量有限。eg<100
然后有一个使用选择屏幕注释的简单选项
只需使用PlaceHolder 100屏幕注释,并将其默认为空格。
然后动态设置第一个N
报告zdemo\u so。
参数:p_测试类型c为复选框默认值abap_true。
选择屏幕注释/5(60)页01。
选择屏幕注释/5(60)页02。
选择屏幕注释/5(60)页03。
选择屏幕注释/5(60)文件夹04。
“…重复到??
选择屏幕注释/5(60)页98。
选择屏幕注释/5(60)页99。
初始化。
数据lt\u目录类型字符串\u表。
字段符号:类型字符串,
键入任何。
数据lbl_nn(2)类型n。
数据lbl_pre(6)类型c值“文件夹”。
数据lbl_名称类型字符串。
folder01=''。
folder02=''。
folder03=''。
folder04=''。
" ...
folder98=''。
folder99=''。
lt_directories=VALUE string_表(`FOLDERNAME1`)(`FOLDERNAME2`)(`FOLDERNAME3`)(`FOLDERNAME4`))。
在lt_目录处循环。
lbl_nn=sy tabix。
lbl\u name=lbl\u pre&lbl\u nn。
将(lbl_名称)分配给。
= .
结束循环。
我不在乎这是评论还是其他什么(但我没有投票否决:D)这很有效-谢谢!我只希望它不会出现在屏幕底部:D@Cold_Class选择屏幕的优点是创建它非常简单,但缺点是您无法按照自己的意愿自定义它。如果您希望列表显示在选择屏幕的两个参数之间,那么它将是一个不同的答案。
DATA: lt_directories TYPE string_table.
DATA: lv_folders_txt TYPE string.
DATA: go_docking TYPE REF TO cl_gui_docking_container.
DATA: go_html_viewer TYPE REF TO cl_gui_html_viewer.
"Report description with test-checkbox
SELECTION-SCREEN BEGIN OF BLOCK b11 WITH FRAME TITLE title.
PARAMETERS: pa_test TYPE c AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN END OF BLOCK b11.
INITIALIZATION.
lt_directories = VALUE string_table( ( `FOLDER1` ) ( `FOLDER2` ) ( `FOLDER3` ) ( `FOLDER4` ) ).
title = 'This program imports data from the listed folders'.
AT SELECTION-SCREEN OUTPUT.
IF go_docking IS NOT BOUND.
go_docking = NEW #(
repid = sy-repid
dynnr = sy-dynnr
side = cl_gui_docking_container=>dock_at_bottom
extension = 180 ). " pixels
DATA: lv_url TYPE cndp_url.
DATA(lv_text) = |<html><body>{
REDUCE #( INIT s = `` FOR dir IN lt_directories NEXT s = |{ s }{ dir }<br>| )
}</body></html>|.
go_html_viewer = NEW cl_gui_html_viewer( parent = go_docking ).
data(soli_tab) = cl_bcs_convert=>string_to_soli( lv_text ).
go_html_viewer->load_data(
EXPORTING type = 'text' subtype = 'html' size = strlen( lv_text )
IMPORTING assigned_url = lv_url
CHANGING data_table = soli_tab ).
go_html_viewer->show_url( url = lv_url ).
ENDIF.
REPORT zdemo_so.
PARAMETERS: p_test TYPE c AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT /5(60) folder01.
SELECTION-SCREEN COMMENT /5(60) folder02.
SELECTION-SCREEN COMMENT /5(60) folder03.
SELECTION-SCREEN COMMENT /5(60) folder04.
"... repeat to ??
SELECTION-SCREEN COMMENT /5(60) folder98.
SELECTION-SCREEN COMMENT /5(60) folder99.
initialization.
data lt_directories type string_table.
FIELD-SYMBOLS: <dirname> type string,
<lbl> TYPE any.
data lbl_nn(2) type n.
data lbl_pre(6) type c value 'FOLDER'.
data lbl_name type string.
folder01 = ''.
folder02 = ''.
folder03 = ''.
folder04 = ''.
" ...
folder98 = ''.
folder99 = ''.
lt_directories = VALUE string_table( ( `FOLDERNAME1` ) ( `FOLDERNAME2` ) ( `FOLDERNAME3` ) ( `FOLDERNAME4` ) ).
loop at lt_directories assigning <dirname>.
lbl_nn = sy-tabix.
lbl_name = LBL_pre && lbl_nn.
assign (lbl_name) to <lbl>.
<lbl> = <dirname>.
endloop.