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

如何在Salesforce中通过Apex或API获取各对象详细存储大小(KB/MB/GB)?

获取Salesforce各对象存储使用量的解决方案

核心需求

编程方式获取标准/自定义对象的详细存储占用(KB/MB/GB),替代Setup页面手动查看,用于长期存储监控数据、规划扩容。已尝试的/limits/recordCount仅返回记录数,无法反映真实存储占用。

方法1:Tooling API查询StorageUsage对象

Salesforce的Tooling API提供StorageUsage对象,直接返回每个对象的存储使用明细,是官方支持的精准获取方式。

REST API请求示例

GET /services/data/v58.0/tooling/query?q=SELECT+EntityType,UsedBytes,StorageType+FROM+StorageUsage

响应解析

返回的records数组中每条记录对应一个对象的存储数据:

  • EntityType:对象API名称(如Account、CustomObject__c)
  • UsedBytes:已占用字节数,可转换为KB/MB/GB(1MB = 1024*1024字节)
  • StorageType:存储类型(Data为记录存储,File为文件/附件存储)

方法2:Apex中调用Tooling API实现

若需在Apex内直接获取并持久化数据,可通过HTTP请求调用Tooling API:

Apex代码示例

public class StorageUsageFetcher {
    public static List<StorageUsageResult> getObjectStorageUsage() {
        List<StorageUsageResult> results = new List<StorageUsageResult>();
        String endpoint = URL.getSalesforceBaseUrl().toExternalForm() + 
            '/services/data/v58.0/tooling/query?q=SELECT+EntityType,UsedBytes,StorageType+FROM+StorageUsage';
        
        HttpRequest req = new HttpRequest();
        req.setEndpoint(endpoint);
        req.setMethod('GET');
        req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId());
        
        HttpResponse res = new Http().send(req);
        if (res.getStatusCode() != 200) return results;

        Map<String, Object> responseMap = (Map<String, Object>)JSON.deserializeUntyped(res.getBody());
        for (Object record : (List<Object>)responseMap.get('records')) {
            Map<String, Object> recordMap = (Map<String, Object>)record;
            StorageUsageResult result = new StorageUsageResult();
            result.objectApiName = (String)recordMap.get('EntityType');
            result.usedBytes = (Integer)recordMap.get('UsedBytes');
            result.storageType = (String)recordMap.get('StorageType');
            result.usedMB = result.usedBytes / (1024.0 * 1024.0);
            results.add(result);
        }
        return results;
    }

    public class StorageUsageResult {
        public String objectApiName;
        public Integer usedBytes;
        public String storageType;
        public Double usedMB;
    }
}

使用说明

调用StorageUsageFetcher.getObjectStorageUsage()即可获取全对象存储数据,可将结果存入自定义对象(如StorageHistory__c)实现长期存储与监控。

注意事项

  • 权限要求:执行用户需拥有View Setup and Configuration权限及API访问权限。
  • 单位转换:严格使用1024进制转换字节到KB/MB/GB,避免与十进制混淆。
  • API版本:StorageUsage对象支持API v40.0及以上,建议使用最新稳定版本。
  • 存储类型筛选:可在SOQL中添加WHERE StorageType = 'Data'或'File',按需获取对应类型的存储数据。

备选估算方案(Tooling API不可用时)

若无法使用Tooling API,可通过以下方式估算:

  1. 遍历对象所有字段,计算单条记录的理论占用(文本字段按字符数,数字/日期等按固定字节)。
  2. 乘以该对象的记录数(通过/limits/recordCount或SOQL COUNT()获取)。
  3. 说明:此方法为估算值,会忽略Salesforce内部存储开销(如索引、元数据),准确性低于Tooling API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:52:22