具有动态可见性的选择屏幕中的单选按钮运行时错误

时间:2019-06-17 04:37:21

标签: sap abap

设置具有动态控件可见性的选择屏幕时,我遇到了意外的运行时错误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”。如果不是这种情况,请选择   发生以下情况:   -组中的多个单选按钮被同时设置。此错误导致应用终止并触发短路   转储您当前正在阅读的内容。

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

1 个答案:

答案 0 :(得分:0)

这样做的原因是未能在单选按钮组的所有按钮上设置完全相同 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必须完全相同,在单个RBG中对这些ID的任何混合都会导致此运行时错误。