设置具有动态控件可见性的选择屏幕时,我遇到了意外的运行时错误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”。如果不是这种情况,请选择 发生以下情况: -组中的多个单选按钮被同时设置。此错误导致应用终止并触发短路 转储您当前正在阅读的内容。
但是我只更改按钮的可见性,为什么会出现与实际活动状态有关的错误?
答案 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.
我最初怀疑具有ACTIVE
或INVISIBLE
属性的问题发生冲突,但这些问题似乎无关。这些控件需要按步调进行更改的实际原因尚不清楚,而无法查看内核中可能隐藏的屏幕处理逻辑。请注意,MODIF ID
必须完全相同,在单个RBG中对这些ID的任何混合都会导致此运行时错误。