下面的多个文本行报告了基于 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.
在执行我的报告之前,我想在选择屏幕下方显示文件夹。
文件夹名称存储在 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.