Salesforce Developer Console匿名执行窗口访问子窗口Case报错问询
Salesforce Execute Anonymous 访问Case对象报错解决方案
- 优先校验权限:确认当前登录账号拥有Case对象的读权限、对应访问字段的字段级安全权限,访问指定Case记录时还要确保记录共享规则对当前账号开放
- 跨上下文访问临时记录的注意点:Execute Anonymous 中未执行
insert操作的临时Case实例仅存储在当前执行上下文内存中,无法跨窗口、跨上下文直接访问。你需要先将记录持久化到数据库,再通过生成的记录Id在其他上下文查询:
复制输出的Id后,在子窗口执行查询逻辑:// 第一步:在原始Execute Anonymous窗口执行,生成持久化Case记录 Case testCase = new Case( Subject = '测试工单', Status = 'New', Origin = 'Web' ); insert testCase; System.debug('生成的Case记录Id:' + testCase.Id);// 替换为上一步生成的Case记录Id Case fetchedCase = [SELECT Id, Subject, Status FROM Case WHERE Id = '替换为实际Id' LIMIT 1]; System.debug('查询到的Case信息:' + fetchedCase); - 常见报错排查:
- 若提示
List has no rows for assignment to SObject:到Salesforce前台Case模块直接输入Id检索,确认记录真实存在,且当前账号有权限访问 - 若提示sObject类型/字段不存在:检查代码中
Case拼写、查询字段的API名称是否正确,注意区分大小写
- 若提示
- 权限临时测试方案:如果怀疑是权限限制导致报错,可以用
without sharing封装逻辑临时绕过共享规则测试,确认问题根因:without sharing class TempCaseQueryUtil { public static void queryCaseById(String recordId) { Case c = [SELECT Id, Subject, Origin FROM Case WHERE Id = :recordId LIMIT 1]; System.debug(c); } } TempCaseQueryUtil.queryCaseById('替换为你的Case记录Id');
注意:
without sharing仅用于本地测试排查,生产环境使用需严格评估数据安全风险
内容的提问来源于stack exchange,提问作者rahul
相关产品推荐
相关产品推荐

