首页 > 解决方案 > 具有动态可见性的选择屏幕中的单选按钮运行时错误

问题描述

在设置具有控件动态可见性的选择屏幕时,我遇到了意外的运行时错误DYNP_TOO_MANY_RADIOBUTTONS_ON。将示例代码简化为以下可重现的示例:

REPORT ztest1.

SELECTION-SCREEN BEGIN OF BLOCK category.
PARAMETER:
  rb_cata   RADIOBUTTON GROUP cat USER-COMMAND selection_changed DEFAULT 'X',
  rb_catb   RADIOBUTTON GROUP cat.
SELECTION-SCREEN END OF BLOCK   category.
SELECTION-SCREEN BEGIN OF BLOCK action.
PARAMETER:
  rb_act1   RADIOBUTTON GROUP act USER-COMMAND selection_changed DEFAULT 'X' MODIF ID act,
  rb_act2   RADIOBUTTON GROUP act.
SELECTION-SCREEN END OF BLOCK   action.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    CASE screen-group1.
      WHEN 'ACT'.
        screen-invisible  = COND #( WHEN rb_cata = abap_true THEN 0 ELSE 1 ).
      WHEN OTHERS.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.

选择rb_catb然后重新选择第一个单选按钮时,我收到运行时错误 DYNP_TOO_MANY_RADIOBUTTONS_ON 并带有注释:

在一组单选按钮中,必须设置一个字段——这意味着必须具有值“X”。如果不是这种情况,则会出现以下情况之一: - 同时设置了该组的多个单选按钮。此错误会导致应用程序终止并触发您当前正在阅读的短转储。

但我只是在更改按钮的可见性,为什么我会收到与实际活动状态相关的错误?

标签: abapsap-selection-screens

解决方案


其原因是未能在单选按钮组中的所有按钮上设置完全相同 MODIF ID。虽然很难获得精确的屏幕处理逻辑,但似乎需要同时更改单选按钮组 (RBG) 中的所有元素以避免处理问题。所以在上面的例子中:

rb_act1   RADIOBUTTON GROUP act USER-COMMAND selection_changed DEFAULT 'X' MODIF ID act,
rb_act2   RADIOBUTTON GROUP act MODIF ID act.

我最初怀疑ACTIVEINVISIBLE属性冲突的问题,但这些似乎无关。如果无法查看可能隐藏在内核中的屏幕处理逻辑,这些控件需要同步更改的实际原因是未知的。请注意,MODIF ID必须完全相同,这些 ID 在单个 RBG 中的任何混合都会导致此运行时错误。


推荐阅读