用户输入后读取 ALV 更改?
Read ALV changes after user input?
我有一份报告,它通过 ALV 网格输出我内部 table 的数据。输出本身由一些信息和每行的两个复选框组成。如有必要,用户可以选中这些框,现在我需要回读 table 以了解选中了哪些框。相应的行将根据选中的两个框中的哪一个进行不同的处理。
我已经尝试过方法get_actual_view
,我不知道如何正确使用方法get_selected_rows
,它似乎获取用户选择的行的索引,但是不是它的内容。
如何在用户选中复选框后读回 table(然后按按钮继续,这将触发报告中的编码以读取数据、处理数据并将其写回网格)?
最好的方法是使用CL_GUI_ALV_GRID以ALV显示输出。
ALV 网格变化,
您必须注册事件 DATA_CHANGED 并在数据更改时帮助您编写代码。
对于选定的行,您必须在 itab 中创建复选框字段,这将帮助您驱动选定的行。
如果您想将屏幕更改传输到 itab,则必须在 PAI 事件中调用方法 check_changed_data 将屏幕更改传输到 itab .
对于某些场景,如果你想知道行内容的任何变化,那么你必须再创建一个长度为1的字段data_change。你可以如果 itab 的内容发生变化,则在适当的事件中标记此字段。
问候,
奥马尔·阿卜杜拉
你需要调用CL_GUI_ALV_GRID
的方法CHECK_CHANGED_DATA
将输入从ALV网格传输到内部table(它适用于 ALV 中的各种输入字段,即不限于复选框)。
最小示例(添加断点before/after CHECK_CHANGED_DATA
,运行程序,编辑一些数据,例如吸烟者复选框,并查看输入如何反映到内部 table;注意:如果演示 table SBOOK
为空,运行 程序 SAPBC_DATA_GENERATOR
) -它使用 ABAP 7.40 和 + 编译:
REPORT.
DATA go_alv TYPE REF TO cl_gui_alv_grid.
DATA gt_sbook TYPE TABLE OF sbook.
PARAMETERS dummy.
AT SELECTION-SCREEN OUTPUT.
DATA: lt_fcat TYPE lvc_t_fcat,
ls_fcat TYPE lvc_s_fcat.
IF go_alv IS NOT BOUND.
CREATE OBJECT go_alv
EXPORTING
i_parent = cl_gui_container=>screen0.
SELECT * FROM sbook UP TO 100 ROWS INTO TABLE gt_sbook.
lt_fcat = CORRESPONDING #( CAST cl_abap_structdescr(
cl_abap_structdescr=>describe_by_name( 'SBOOK' ) )->get_ddic_field_list( ) ).
ls_fcat-checkbox = abap_true.
MODIFY lt_fcat FROM ls_fcat TRANSPORTING checkbox WHERE fieldname = 'SMOKER'.
go_alv->set_table_for_first_display(
EXPORTING
is_layout = VALUE #( edit = 'X' )
CHANGING
it_fieldcatalog = lt_fcat
it_outtab = gt_sbook ).
ENDIF.
AT SELECTION-SCREEN ON EXIT-COMMAND.
go_alv->check_changed_data( ). " <=== transfer screen data to GT_SBOOK
go_alv->free( ).
我有一份报告,它通过 ALV 网格输出我内部 table 的数据。输出本身由一些信息和每行的两个复选框组成。如有必要,用户可以选中这些框,现在我需要回读 table 以了解选中了哪些框。相应的行将根据选中的两个框中的哪一个进行不同的处理。
我已经尝试过方法get_actual_view
,我不知道如何正确使用方法get_selected_rows
,它似乎获取用户选择的行的索引,但是不是它的内容。
如何在用户选中复选框后读回 table(然后按按钮继续,这将触发报告中的编码以读取数据、处理数据并将其写回网格)?
最好的方法是使用CL_GUI_ALV_GRID以ALV显示输出。
ALV 网格变化,
您必须注册事件 DATA_CHANGED 并在数据更改时帮助您编写代码。
对于选定的行,您必须在 itab 中创建复选框字段,这将帮助您驱动选定的行。
如果您想将屏幕更改传输到 itab,则必须在 PAI 事件中调用方法 check_changed_data 将屏幕更改传输到 itab .
对于某些场景,如果你想知道行内容的任何变化,那么你必须再创建一个长度为1的字段data_change。你可以如果 itab 的内容发生变化,则在适当的事件中标记此字段。
问候,
奥马尔·阿卜杜拉
你需要调用CL_GUI_ALV_GRID
的方法CHECK_CHANGED_DATA
将输入从ALV网格传输到内部table(它适用于 ALV 中的各种输入字段,即不限于复选框)。
最小示例(添加断点before/after CHECK_CHANGED_DATA
,运行程序,编辑一些数据,例如吸烟者复选框,并查看输入如何反映到内部 table;注意:如果演示 table SBOOK
为空,运行 程序 SAPBC_DATA_GENERATOR
) -它使用 ABAP 7.40 和 + 编译:
REPORT.
DATA go_alv TYPE REF TO cl_gui_alv_grid.
DATA gt_sbook TYPE TABLE OF sbook.
PARAMETERS dummy.
AT SELECTION-SCREEN OUTPUT.
DATA: lt_fcat TYPE lvc_t_fcat,
ls_fcat TYPE lvc_s_fcat.
IF go_alv IS NOT BOUND.
CREATE OBJECT go_alv
EXPORTING
i_parent = cl_gui_container=>screen0.
SELECT * FROM sbook UP TO 100 ROWS INTO TABLE gt_sbook.
lt_fcat = CORRESPONDING #( CAST cl_abap_structdescr(
cl_abap_structdescr=>describe_by_name( 'SBOOK' ) )->get_ddic_field_list( ) ).
ls_fcat-checkbox = abap_true.
MODIFY lt_fcat FROM ls_fcat TRANSPORTING checkbox WHERE fieldname = 'SMOKER'.
go_alv->set_table_for_first_display(
EXPORTING
is_layout = VALUE #( edit = 'X' )
CHANGING
it_fieldcatalog = lt_fcat
it_outtab = gt_sbook ).
ENDIF.
AT SELECTION-SCREEN ON EXIT-COMMAND.
go_alv->check_changed_data( ). " <=== transfer screen data to GT_SBOOK
go_alv->free( ).