下面的多个文本行报告了基于 table 个条目的选择屏幕参数

Multiple text lines below report selection-screen parameters based on table entries

在执行我的报告之前,我想在选择屏幕下方显示文件夹。
文件夹名称存储在 table.
中 因为我事先不知道 table 有多少条目,所以这需要是动态的——而不是硬编码。

这是我目前所做的:

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.

结果如下:

这是我希望它看起来像的示例:

有人知道一个简单的方法吗?

很遗憾,COMMENT 无法做到这一点。它总是显示在一行中。即使在最后使用换行符(或回车 return + 换行符)也不会给你预期的结果。

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.

您可以创建一个 docking container at the bottom of the screen, and include any "text view" control in it, like the SAP HTML viewer 例如:

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.

如果您不喜欢在运行时生成 dynpro 或报告。
如果您不想将控件与内容停靠。
如果需要显示的条目数量有一定限制。例如 < 100

然后有一个简单的选项使用SELECTION-SCREEN COMMENTS
只需使用占位符 100 屏幕评论并将它们默认为 space.
然后动态设置第N个。

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.