如何通过POPUP_GET_VALUES获取弹窗输入并做百分比验证?
解决方案:适配POPUP_GET_VALUES实现单个变量存储+百分比输入限制
我之前刚好处理过一模一样的需求!POPUP_GET_VALUES确实要求把输入值存到内表里,但咱们可以用一个小技巧绕开这个限制,把值转存到单个变量里,同时还能加上百分比的输入校验。下面是具体的实现步骤和代码:
核心思路
我们可以利用系统标准的sval结构创建一个只包含单个字段的临时内表,将这个内表传给POPUP_GET_VALUES函数。用户在弹窗输入完成后,再从内表中取出唯一的那条记录,赋值给我们的目标变量。同时通过配置字段属性和额外校验,实现百分比的输入限制。
完整可运行代码示例
REPORT z_popup_single_percent_input. * 定义存储最终百分比的单个变量 DATA: gv_target_percent TYPE p DECIMALS 2. * 用于POPUP_GET_VALUES的临时内表和工作区 DATA: gt_input_fields TYPE TABLE OF sval, gs_input_field TYPE sval. * 1. 配置弹窗的输入字段参数 gs_input_field-tabname = 'DUMMY_TABLE'. " 虚拟表名,无需真实存在 gs_input_field-fieldname = 'PERCENT_VALUE'. gs_input_field-fieldtext = '请输入百分比 (%)'. gs_input_field-type = 'P'. " 设置为数值类型,避免非数字输入 gs_input_field-decimals = 2. " 保留两位小数,适配百分比精度 gs_input_field-length = 5. " 限制输入长度(例如最多99.99) gs_input_field-low = '0'. " 可选:设置最小值,弹窗自动限制 gs_input_field-high = '100'. " 可选:设置最大值,弹窗自动限制 APPEND gs_input_field TO gt_input_fields. * 2. 调用弹窗函数获取用户输入 CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING popup_title = '百分比输入' " 弹窗标题 TABLES fields = gt_input_fields " 传入配置好的字段表 EXCEPTIONS error_in_fields = 1 OTHERS = 2. IF sy-subrc = 0. * 3. 从内表中取出值,转存到单个变量 READ TABLE gt_input_fields INTO gs_input_field INDEX 1. IF sy-subrc = 0. gv_target_percent = gs_input_field-value. * 额外校验:确保输入在合法百分比范围内(如果没设置low/high的话) IF gv_target_percent < 0 OR gv_target_percent > 100. MESSAGE '请输入0-100之间的合法百分比' TYPE 'E' DISPLAY LIKE 'I'. ENDIF. * 测试输出结果 WRITE: / '您输入的百分比为:', gv_target_percent, '%'. ENDIF. ELSE. MESSAGE '弹窗输入过程中出现异常' TYPE 'E' DISPLAY LIKE 'I'. ENDIF.
关键细节说明
- 临时内表适配:系统标准结构
sval完全满足POPUP_GET_VALUES的参数要求,不需要额外自定义结构。tabname填虚拟名称即可,函数不会校验该表是否真实存在。 - 百分比输入限制:
- 通过
type = 'P'和decimals = 2确保输入是带小数的数值,过滤非数字输入; - 设置
low和high属性可以让弹窗自动限制输入范围(0-100),用户无法输入超出范围的值; - 后续的
IF判断作为兜底校验,确保极端情况下的输入合法性。
- 通过
- 值转存单个变量:因为我们只配置了一个输入字段,内表里只会有一条记录,直接通过
READ TABLE ... INDEX 1就能快速取出值并赋值给目标变量。
内容的提问来源于stack exchange,提问作者xakal
相关产品推荐
相关产品推荐

