如何在COR1/COR2增强中按Z表用户灰化禁用需求数量字段
代码检查结果与修正建议
现有代码的核心问题
- 事件语法错误:
AT SELECTION-SCREEN OUTPUT是ABAP的事件关键字,不能嵌套在IF wa_zita IS NOT INITIAL的条件块中。ABAP事件必须处于全局代码区域,不能被普通条件语句包裹,否则逻辑无法触发。 - 逻辑执行顺序错误:原代码先查询Z表,再尝试在嵌套的事件中处理屏幕,但事件的触发时机是固定的,这种写法会导致屏幕修改逻辑完全不生效。
- 潜在字段匹配风险:需要确认COR1/COR2事务中「需求数量」对应的屏幕字段名确实是
BDMNG,如果字段名不匹配,灰化逻辑不会起作用。
修正后的代码
AT SELECTION-SCREEN OUTPUT. IF sy-tcode EQ 'COR1' OR sy-tcode EQ 'COR2'. SELECT SINGLE * FROM zita_pp_cor1 INTO @DATA(wa_zita) WHERE z_user = @sy-uname. IF wa_zita IS NOT INITIAL. LOOP AT SCREEN. IF screen-name = 'BDMNG'. screen-input = 0. MODIFY SCREEN. ENDIF. ENDLOOP. ENDIF. ENDIF.
修正说明
- 将
AT SELECTION-SCREEN OUTPUT事件放在全局区域,确保事务启动时能正确触发屏幕修改逻辑。 - 调整逻辑顺序:在事件内先判断当前事务是否为COR1/COR2,再查询Z表验证用户是否在限制列表中,最后执行字段灰化操作,完全贴合需求逻辑。
- 保留原有的字段灰化逻辑,同时确保语法符合ABAP事件模型的要求。
内容的提问来源于stack exchange,提问作者Uzair Qazi
相关产品推荐
相关产品推荐

