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”。如果不是这种情况,则会出现以下情况之一: - 同时设置了该组的多个单选按钮。此错误会导致应用程序终止并触发您当前正在阅读的短转储。
但我只是在更改按钮的可见性,为什么我会收到与实际活动状态相关的错误?
解决方案
其原因是未能在单选按钮组中的所有按钮上设置完全相同 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
必须完全相同,这些 ID 在单个 RBG 中的任何混合都会导致此运行时错误。
推荐阅读
- python - jax 的矢量化指南
- javascript - 我可以得到一个项目的价值,但通过听它来改变它吗?
- powershell - 获取 DNS 脚本在报告中缺少输出
- reactjs - 如何在getStaticPaths nextjs中调用多个API路由
- spring-boot - Spring Boot Bucket4j在速率限制超过时自定义http响应体
- python - MyPy 找不到特定 Python 版本的库存根
- cassandra - spring-data-cassandra-reactive 提高 ReactiveCrudRepository.save 的性能
- sql - 在 SSIS .dtsx 包中查找表名
- android - Flutter WebView加载不同版本的页面?
- node.js - Twitter API 在尝试发推文时给出此“消息:'对不起,该页面不存在',代码:34”“twitterReply:{错误:[[Object]]}”