【问题标题】:ALV changing variants doesn´t apply filterALV 更改变体不应用过滤器
【发布时间】:2015-05-20 13:28:07
【问题描述】:

我自己的程序有问题。在这个程序中,用户必须在选择屏幕上输入数据。在那里,他还可以选择已保存的 ALV 变体之一。 在下一步中,将显示带有所选数据的 ALV 列表。此外,ALV 中的数据应具有选定的布局。在此 ALV 中,用户可以更改、保存、选择和管理具有正常 ALV 功能的 ALV 变体。尽管如此,这还是有问题的。如果用户想使用过滤器切换到现有的 ALV 变体,有时(90% 的情况)不会应用过滤器和所选 ALV 的排序。 如果他在选择屏幕中输入此变量,则将正确应用包含所有过滤器、排序等的正确 ALV 布局。 我在选择屏幕中的 f4-help 代码:

DATA: lwa_variant LIKE disvariant,
      lw_exit_flag TYPE cmpflag.

lwa_variant-report = sy-repid.


CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
  is_variant = lwa_variant
  i_save = 'A'
IMPORTING
  e_exit = lw_exit_flag
  es_variant = wa_variant
EXCEPTIONS
  not_found = 1
  program_error = 2
  OTHERS = 3.
IF sy-subrc <> 0.
  MESSAGE s899(mm) WITH text-088.
ELSEIF NOT lw_exit_flag IS INITIAL.
  MESSAGE s899(mm) WITH text-089.
  CLEAR wa_variant.
ENDIF.
p_layou = wa_variant-variant.

我的代码在带有 ALV 的屏幕的 PBO 中:

 DATA: i_fieldcat TYPE lvc_t_fcat,
    wa_layout  TYPE lvc_s_layo,
    wa_stable  TYPE lvc_s_stbl,
    wa_r_variant TYPE DISVARIANT.

IF o_alv_container IS INITIAL.

CREATE OBJECT o_alv_container
  EXPORTING
    container_name = 'O_ALV_CONTAINER'.

CREATE OBJECT o_alv
  EXPORTING
    i_parent = o_alv_container
  EXCEPTIONS
    others   = 1.
IF sy-subrc <> 0.
  MESSAGE e002.
ENDIF.
IF wa_variant IS INITIAL AND p_layou IS INITIAL.
  wa_r_variant-report = sy-repid.
ELSEIF wa_variant IS NOT INITIAL.
 wa_r_variant = wa_variant.
  wa_r_variant-handle = SPACE.
  wa_r_variant-log_group = SPACE.
  wa_r_variant-username = SPACE.
  wa_r_variant-text = SPACE.
  wa_r_variant-dependvars = SPACE.
ELSE.
  wa_r_variant-report = sy-repid.
  wa_r_variant-variant = p_layou.

ENDIF.

 wa_layout-zebra = ''.
 wa_layout-stylefname = 'IMPUT_STYLE'.
 wa_layout-sel_mode = 'A'.
 wa_layout-cwidth_opt = 'X'.

CALL METHOD o_alv->set_table_for_first_display
  EXPORTING
    is_variant      = wa_r_variant
    is_layout       = wa_layout
    i_save          = 'A'
    i_default       = 'A'
  CHANGING
    it_outtab       = i_alv_data
    it_fieldcatalog = i_fieldcat
  EXCEPTIONS
    OTHERS          = 4.
IF sy-subrc <> 0.
  MESSAGE e002.
ENDIF.


ELSE.

wa_stable-COL = 'X'.
wa_stable-row = 'X'.

CALL METHOD o_alv->refresh_table_display
  EXPORTING
    is_stable = wa_stable
  EXCEPTIONS
    OTHERS = 1.
IF sy-subrc <> 0.
  MESSAGE e003.
ENDIF.
ENDIF.

我从来没有在任何其他程序上遇到过这样的问题,我也从未听说过这个。不幸的是,表格中有很多字段(> 20),因此用户必须按照他们想要的方式对其进行配置(使用过滤器、排序等)。经过数小时的测试,我无法弄清楚我的代码出了什么问题。我还调试了 SAP ALV 方法。我发现在某些情况下系统无法加载过滤器。但我不知道为什么。任何提示或信息都可能对我有用。 提前致谢!

【问题讨论】:

  • 您是否能够创建 MWE 来重现该问题?使用上面的 sn-ps,很难检查系统行为。
  • 你能告诉我什么是 MWE 吗?比我可以检查是否可能
  • 尝试在 refresh_table_display 方法调用中删除导出参数。
    另一方面,您不需要使用 ALV 变体来完成整个 PAI 业务,让 SAP 提供的工具栏为您处理。您应该只从选择屏幕验证变体并仅在 PBO 时传递它。休息系统会照顾。

标签: abap alv


【解决方案1】:

我终于明白了,出了什么问题。

在程序中使用 Shift + 双击 ALV 的空白区域,您可以看到 ALV 中出现的错误消息。修复它们后,该功能可以正常工作。

我的问题是这一行:

wa_layout-stylefname = 'IMPUT_STYLE'。

问候

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    相关资源
    最近更新 更多