我有2个屏幕7000和7001,7000屏幕在我们单击时包含一个按钮,它必须导航到7001屏幕,但它无法正常工作。屏幕7000也有一些细节以显示为Alv。
屏幕正在导航到屏幕7001,但数据没有刷新。任何人都可以帮助吗?我正在使用ALV网格容器。对于两个屏幕,我都使用相同的ALV网格
示例代码:
screen 7000 PAI:
WHEN 'DISPLAY'.
call SCREEN 7001.
screen 7001 PBO:
GET REFERENCE OF m_instance->gt_field INTO lr_output.
CREATE OBJECT gr_grid
EXPORTING
i_parent = cl_gui_container=>default_screen.
CALL FUNCTION 'ZLSO_GENERATE_GENERIC_FIELDCAT'
EXPORTING
ir_input_value = lr_output
IMPORTING
et_fieldcat_fcat = lt_fldcat
EXCEPTIONS
xc_invalid_type = 1
xc_empty_table = 2
xc_unknown_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ' Error in generating ALV' TYPE 'E'.
ENDIF.
CALL METHOD gr_grid->set_table_for_first_display
EXPORTING
is_layout = gs_layout
CHANGING
it_fieldcatalog = lt_fldcat
it_outtab = m_instance->gt_field.
gr_grid->refresh_table_display( ).
1(主要问题
可能您正在体验到几个UI控件分配给同一UI容器的情况,仅显示第一个控件。
要避免此问题,您必须释放额外的控件,以便仅一个控件分配给每个容器。
在您的情况下,您将2个ALV网格分配给同一虚拟容器DEFAULT_SCREEN
;您的控件是CL_GUI_ALV_GRID
类的实例,您可以调用方法FREE
以释放它。
2(代码中还有另一个问题
上面的解决方案应解决您的直接问题,但这将创建另一个问题,因为您将在返回屏幕7000时必须重新构成ALV网格,这将重置滚动位置,等等。/p>
您可以通过更改代码中的其他内容来避免它。
dynpro(ABAP屏幕(包含UI元素,但是如果将控件分配给"虚拟屏幕"(CL_GUI_CONTAINER
的任何静态属性*SCREEN*
(,则此控件将通过dynpro显示(UI元素的UI元素除工具栏外,完全没有显示DynPro。
代替使用虚拟屏幕,您应该在DynPro中定义一个自定义控制区域,给它一个名称,然后在PBO中,通过指示区域名称创建自定义容器(类CL_GUI_CUSTOM_CONTAINER
(,并将ALV网格分配给那个容器。
如果您在两个屏幕中执行此操作,则每个容器只有一个ALV网格,并且您无需在每个导航步骤中释放和重新安置控件。