You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apex触发器报错:变量Accnew、ACCold不存在如何解决

报错根因
  • 变量大小写不匹配:Apex 变量名严格区分大小写,你在for循环中声明的循环变量为accNew,但获取旧记录时传入的参数写为Accnew,和已声明变量名不一致,编译器无法识别;同理旧记录变量声明时写为Accold,后续字段比对时又写为AccOld,同样存在大小写不匹配问题,直接触发变量不存在的报错。
  • 循环作用域缺失:for循环语句后未添加左大括号{,按照Apex语法规则,无大括号包裹的循环仅会将紧随其后的第一行代码作为循环执行体,后续字段比对、抛错的代码全部处于for循环作用域之外,根本无法访问循环内声明的accNew变量,也不符合触发器批量处理的逻辑要求。
  • 附加语法问题:条件判断关键字写为大写开头的If,不符合Apex小写关键字的语法规范,部分环境下会直接抛出语法错误。
修复方案
  1. 统一全量变量名的大小写,循环变量固定使用accNew,旧记录变量固定使用accOld,避免随意切换大小写。
  2. 为for循环补全成对大括号,将所有单条记录处理逻辑全部包裹在循环作用域内,解决跨作用域访问变量的问题。
  3. 将大写开头的If调整为小写if,同时把trigger.oldmap调整为官方规范写法trigger.oldMap,避免潜在兼容问题。

修复后可正常运行的完整代码:

trigger PractiseM on Account (before update) {
    if (trigger.isBefore && trigger.isUpdate) {
        for(Account accNew : trigger.new) {
            Account accOld = trigger.oldMap.get(accNew.Id);
            if (accNew.Name != accOld.Name) {
                accNew.addError('Please do not change the account name');
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Faisal S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 21:12:12