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.