我知道我的问题已被问过一百次了。 但我仍然找不到合适的解决方案
我的问题是,在我保存后,我无法刷新ALV 但如果我没有按下保存按钮
,那就不成问题了请帮助我 谢谢
附加代码 步骤1是#34;当SET_P"在此代码中
注意: 来自SAP论坛的人告诉我将刷新功能移到PBO,我尝试了但仍然失败了
MODULE pbo_1000 OUTPUT.
IF flag = 0.
SET PF-STATUS '1000'.
SET TITLEBAR '1000'.
s_name = sy-uname.
s_date = sy-datum.
IF s_month IS INITIAL AND s_year IS INITIAL.
s_month = sy-datum+4(2).
s_year = sy-datum(4).
ENDIF.
PERFORM create_toolbar.
PERFORM create_catalog.
PERFORM select_data.
CREATE OBJECT ob_custom
EXPORTING
container_name = 'CCTRL'.
CREATE OBJECT ob_grid
EXPORTING
i_parent = ob_custom
i_appl_events = 'X'.
PERFORM create_dropbox.
CALL METHOD ob_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'TYPE'
it_toolbar_excluding = lt_toolbar
is_layout = lyt
CHANGING
it_fieldcatalog = fld[]
it_outtab = itab[].
CALL METHOD ob_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
CALL METHOD ob_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
ENDIF.
ENDMODULE.
PAI Module
MODULE user_command_1000 INPUT .
DATA: v_perio(6) TYPE c.
CASE sy-ucomm.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE TO SCREEN 0.
WHEN 'SAVE'.
PERFORM save_data.
PERFORM send_email.
WHEN 'SET_S'.
flag = 1.
PERFORM set_status.
CALL METHOD ob_grid->refresh_table_display
EXPORTING
is_stable = stbl.
WHEN 'SET_P'.
flag = 1.
PERFORM select_data.
CALL METHOD ob_grid->refresh_table_display
EXPORTING
is_stable = stbl.
ENDCASE.
ENDMODULE.
答案 0 :(得分:0)
我在应用程序中做了类似的事情,需要在保存时刷新,因为某些计算必须在屏幕上更改。我在命令表单中为'REUSE_ALV_GRID_DISPLAY'功能模块设置了以下代码的一部分。
form user_command using r_ucomm like sy-ucomm
rs_selfield type slis_selfield.
data: ref_grid type ref to cl_gui_alv_grid, l_valid type c.
if ref_grid is initial.
call function 'GET_GLOBALS_FROM_SLVC_FULLSCR'
importing
e_grid = ref_grid.
endif.
if not ref_grid is initial.
call method ref_grid->check_changed_data
importing
e_valid = l_valid.
endif.
rs_selfield-refresh = 'X'.
...
if not ref_grid is initial.
call method ref_grid->refresh_table_display( ) .
endif.
endform.
希望有所帮助
答案 1 :(得分:0)
我猜您需要在PAI中首先调用 CHECK_CHANGED_DATA 方法,这会触发事件 DATA_CHANGED 和 DATA_CHANGED_FINISHED 。
但最重要的是,它会将OLE对象与实例后端同步,然后当您调用 REFRESH_TABLE_DISPLAY 时,它会正确刷新您的ALV。我目前没有任何例子,但我可以在下周访问系统时尝试。
顺便说一下,在PBO中你不需要变量 flag 你可以使用检查ALV对象是否已经初始化,并根据这个你可以创建/刷新alv。像这样:
if alvGridRef is NOT bound .
data(container) = new cl_gui_custom_container( ) .
data(alvGridRef) = new cl_gui_alv_grid( ) .
else .
alvGridRef->refresh_table_display( ) .
endif .
答案 2 :(得分:0)
您可以通过手动触发PBO 来实现此目的。您说已保存编辑,因此您可以再次在PBO中显示ALV:
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
functioncode = 'REFRESH'
EXCEPTIONS
function_not_supported = 1
OTHERS = 2.
执行此操作后,PBO中的sy-ucomm
的值为REFRESH
。