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

