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

如何修改SOQL排除公式字段并解决Apex权限更新无效果问题

问题1:修改SOQL排除公式/计算字段

要过滤掉公式字段,需要关联FieldDefinition对象(存储字段元数据),通过其IsCalculated字段判断是否为公式/计算字段。修改后的SOQL如下:

SELECT Id, Field, SObjectType, PermissionsRead, PermissionsEdit 
FROM FieldPermissions 
WHERE ParentId IN (
    SELECT Id 
    FROM PermissionSet 
    WHERE PermissionSet.Profile.Name = 'System Administrator'
) 
AND SObjectType = 'Simploud__Controlled_Document__c' 
AND (PermissionsRead = false OR PermissionsEdit = false)
AND Field IN (
    SELECT QualifiedApiName 
    FROM FieldDefinition 
    WHERE EntityDefinition.QualifiedApiName = 'Simploud__Controlled_Document__c' 
    AND IsCalculated = false
)

逻辑说明:通过子查询从FieldDefinition中获取指定对象的非公式字段API名,再用Field IN (...)过滤FieldPermissions结果,直接排除公式字段。

问题2:修复Apex代码权限不生效问题

你的代码存在两个核心问题:循环单条DML不符合最佳实践,且Profile关联的PermissionSet权限更新有特殊注意事项。修改后的代码如下:

// 直接查询目标权限记录,匿名窗口无需声明public变量
List<FieldPermissions> fieldPerms = [
    SELECT Id, PermissionsRead, PermissionsEdit 
    FROM FieldPermissions 
    WHERE ParentId IN (
        SELECT Id 
        FROM PermissionSet 
        WHERE PermissionSet.Profile.Name = 'System Administrator'
    ) 
    AND SObjectType = 'Simploud__Controlled_Document__c' 
    AND (PermissionsRead = false OR PermissionsEdit = false)
    AND Field IN (
        SELECT QualifiedApiName 
        FROM FieldDefinition 
        WHERE EntityDefinition.QualifiedApiName = 'Simploud__Controlled_Document__c' 
        AND IsCalculated = false
    )
];

// 批量修改权限值
for(FieldPermissions fp : fieldPerms){
    fp.PermissionsRead = true;
    fp.PermissionsEdit = true;
}

// 批量执行DML更新(避免单条DML触发限制)
if(!fieldPerms.isEmpty()){
    update fieldPerms;
    System.debug('成功更新' + fieldPerms.size() + '条字段权限记录');
}

额外注意事项:

  • 权限生效延迟:修改后可能需要等待1-2分钟,或让用户重新登录才能看到权限变化。
  • Profile锁定限制:部分标准Profile(如System Administrator)的核心权限可能被锁定,无法通过API修改,此时需前往Setup界面手动调整。
  • 权限覆盖检查:确认没有其他PermissionSet或Profile的权限设置覆盖当前修改。

内容的提问来源于stack exchange,提问作者Suliman Qahaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:15:21