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

非管理员用户查询FeedItem报错的解决方案咨询

FeedItem查询权限问题解决方案

错误原因

Salesforce对FeedItem对象有查询实现限制:非管理员用户无法直接通过ParentId批量查询FeedItem,必须满足权限检查或调整查询方式。

可行解决方案

方案1:添加权限强制检查子句

在查询中加入WITH SECURITY_ENFORCED,确保查询仅返回用户有权访问的FeedItem,同时要求用户对目标Opportunity记录有访问权限、对FeedItem对象有读取权限:

List<FeedItem> feeditemList = [SELECT ID, CreatedDate, CreatedById, CreatedBy.Name, ParentId, Parent.Name, Body 
                                FROM FeedItem 
                                WHERE ParentId = :oppId_Set 
                                ORDER BY CreatedDate DESC 
                                LIMIT 1 
                                WITH SECURITY_ENFORCED];

方案2:逐记录查询(适合小型数据集)

避免批量ParentId查询,循环每个Opportunity Id单独查询FeedItem,单Id查询不会触发限制:

Datetime latestFeeditemDate = null;
for(Id oppId : oppId_Set) {
    List<FeedItem> feedItems = [SELECT CreatedDate 
                                FROM FeedItem 
                                WHERE ParentId = :oppId 
                                ORDER BY CreatedDate DESC 
                                LIMIT 1];
    if(!feedItems.isEmpty() && feedItems[0].CreatedDate != null) {
        if(latestFeeditemDate == null || feedItems[0].CreatedDate > latestFeeditemDate) {
            latestFeeditemDate = feedItems[0].CreatedDate;
        }
    }
}

方案3:配置FeedItem共享规则

在Salesforce设置中配置FeedItem的共享规则,基于Parent记录(如Opportunity)的共享关系,让非管理员用户能访问对应Opportunity的FeedItem。

代码优化建议

原代码中循环遍历仅含1条数据的列表属于冗余操作,可简化为直接取列表首元素:

if(!feeditemList.isEmpty()) {
    FeedItem fi = feeditemList[0];
    if(fi.CreatedDate != null) {
        latestFeeditemDate = fi.CreatedDate;
        System.debug('latestFeeditemDate: ' + latestFeeditemDate);                    
    }
}

内容的提问来源于stack exchange,提问作者Sejal Gohil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:15:59