如何通过SOQL/Salesforce API获取占用自定义字段限额的字段?
获取Salesforce对象字段限额占用情况的API与方法
你的原FIELDDEFINITION查询没得到预期结果,是因为这个对象本身不存储字段限额的使用关联数据——要定位哪些字段占用了各类限额,得结合字段属性筛选+对象限额数据核对,以下是可行方案:
1. 用Tooling API查询具体占用限额的字段
针对不同类型的字段限额,通过FieldDefinition的属性筛选对应字段,同时可以结合EntityDefinition查看对象的总限额和已使用数:
先查对象的限额与已使用量
SELECT Id, DeveloperName, CustomFieldLimit, CustomFieldUsage, ExternalIdLimit, ExternalIdUsage, LookupRelationshipLimit, LookupRelationshipUsage, MasterDetailRelationshipLimit, MasterDetailRelationshipUsage FROM EntityDefinition WHERE DeveloperName = 'Account'
这个查询能直接看到Account对象各类字段的限额上限和已使用数量,帮你快速掌握整体占用情况。
筛选具体占用限额的字段
- 自定义字段(占用CustomField限额):
SELECT QualifiedApiName, Label, DataType, IsCustom FROM FieldDefinition WHERE EntityDefinition.DeveloperName = 'Account' AND IsCustom = true
- 外部ID字段(占用ExternalId限额):
SELECT QualifiedApiName, Label, IsExternalId FROM FieldDefinition WHERE EntityDefinition.DeveloperName = 'Account' AND IsExternalId = true
- Lookup关系字段(占用LookupRelationship限额):
SELECT QualifiedApiName, Label, IsLookup FROM FieldDefinition WHERE EntityDefinition.DeveloperName = 'Account' AND IsLookup = true
- MasterDetail关系字段(占用MasterDetailRelationship限额):
SELECT QualifiedApiName, Label, IsMasterDetail FROM FieldDefinition WHERE EntityDefinition.DeveloperName = 'Account' AND IsMasterDetail = true
2. 用REST API的Describe SObject端点获取
调用标准REST API的对象描述接口,返回的字段列表包含所有字段属性,可自行筛选占用限额的字段:
GET /services/data/v59.0/sobjects/Account/describe
返回的JSON中,每个字段对象会带externalId、lookup、masterDetail、custom等布尔属性,用来判断是否占用对应限额。
3. 用Salesforce CLI快速导出(适合本地查看)
如果需要批量导出占用限额的字段元数据,可使用CLI命令:
sfdx force:source:retrieve -m CustomField:Account
导出的元数据文件会包含所有Account的自定义字段,你可以从中查看字段类型、是否为外部ID等属性。
内容的提问来源于stack exchange,提问作者trey hannam
相关产品推荐
相关产品推荐

