从用户命令导航时ALV刷新问题



我有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网格,并且您无需在每个导航步骤中释放和重新安置控件。

相关内容

  • 没有找到相关文章

最新更新