Apex Specialist Challenge 1触发Too Many DML Rows错误排查求助
逻辑问题说明
错误的循环逻辑产生笛卡尔积冗余数据,直接触发Governor Limit报错
你在插入新生成的保养Case后,编写的嵌套循环未做新旧Case的关联匹配:外层遍历所有新Case,内层直接全量遍历本次所有关闭的原始Case对应的设备列表,相当于把所有原始Case关联的设备,重复绑定到每一个新Case上,最终生成的待插入Equipment_Maintenance_Item__c记录数为新Case数量 * 所有原始Case关联设备总数量,远高于Apex单事务DML最多插入1万条记录的限制,就是你看到的4万条记录报错的直接原因。
你缺少了「原始关闭Case ID → 对应新生成Case」的映射关系,生成关联设备记录时,仅需要把对应原始Case的设备绑定到对应的新Case上即可,不会产生冗余数据。聚合查询未加过滤条件,存在效率和空指针风险
getMainainanceCycleForCases方法中的聚合SOQL没有添加Maintenance_Request__c IN :closedCaseList的过滤条件,会查询当前Org中所有历史设备维修项的聚合结果,不仅会拖慢执行效率,还会出现当前关闭的Case不在返回的聚合Map中的情况,后续调用maintainTimeMap.get(c.Id)时会抛出空指针异常。缺少必要的空值防御判断
代码未对边界场景做处理:如果某条关闭的Case没有关联任何设备维修项、或者关联的设备未维护保养周期字段,在调用maintainTimeMap.get(c.Id)、访问设备ID时都会出现空指针异常,打断执行流程。
内容的提问来源于stack exchange,提问作者henrywright88404
相关产品推荐
相关产品推荐

