【发布时间】:2020-07-11 04:59:22
【问题描述】:
我正在尝试查询 Salesforce SOQL API 以获取对象的特定字段。我可以使用describe 端点取回所有字段,但是有没有办法获取特定字段。例如,我如何获取帐户的所有权字段及其 PicklistValues?
【问题讨论】:
标签: salesforce soql
我正在尝试查询 Salesforce SOQL API 以获取对象的特定字段。我可以使用describe 端点取回所有字段,但是有没有办法获取特定字段。例如,我如何获取帐户的所有权字段及其 PicklistValues?
【问题讨论】:
标签: salesforce soql
所有权可能是一个自定义字段,还是您重命名了一个标准字段?
使用 describe 调用,它会类似于 Account.Ownership__c.getDescribe().getPicklistValues();。查看所有field describe methods。
如果你想遍历对象上所有可用的选项列表,它会是这样的:
List<String> objectNames = new List<String>{'Account'};
for(Schema.DescribeSObjectResult dsr : Schema.describeSObjects(objectNames)){
// System.debug(dsr);
String objectLabel = dsr.getLabel();
Map<String, Schema.SObjectField> allFields = dsr.fields.getMap();
System.debug(allFields);
for(String fieldName : allFields.keyset()){
Schema.DescribeFieldResult dfr = allFields.get(fieldName).getDescribe();
if(!dfr.getPicklistValues().isEmpty()){
System.debug(objectLabel + '.' + dfr.getLabel() + ': ' + dfr.getPicklistValues());
}
}
}
Account.Account Type: (Schema.PicklistEntry[getLabel=Prospect;getValue=Prospect;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Customer - Direct;getValue=Customer - Direct;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Customer - Channel;getValue=Customer - Channel;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Channel Partner / Reseller;getValue=Channel Partner / Reseller;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Installation Partner;getValue=Installation Partner;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Technology Partner;getValue=Technology Partner;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Other;getValue=Other;isActive=true;isDefaultValue=false;])
Account.Billing State/Province Code: (Schema.PicklistEntry[getLabel=Acre;getValue=AC;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Agrigento;getValue=AG;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Aguascalientes;getValue=AG;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Alabama;getValue=AL;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Alagoas;getValue=AL;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Alaska;getValue=AK;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Alberta;getValue=AB;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Alessandria;getValue=AL;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Amapá;getValue=AP;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Amazonas;getValue=AM;isActive=true;isDefaultValue=false;], ...)
Account.Billing Country Code: (Schema.PicklistEntry[getLabel=Afghanistan;getValue=AF;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Aland Islands;getValue=AX;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Albania;getValue=AL;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Algeria;getValue=DZ;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Andorra;getValue=AD;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Angola;getValue=AO;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Anguilla;getValue=AI;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Antarctica;getValue=AQ;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Antigua and Barbuda;getValue=AG;isActive=true;isDefaultValue=false;], Schema.PicklistEntry[getLabel=Argentina;getValue=AR;isActive=true;isDefaultValue=false;], ...)
如果您想使用 SOQL 来拉取它 - 您可以一次查询 1 个字段,它将位于 FieldDefinition。不过,您可能无法在普通 Apex SOQL 中执行此操作,我认为您需要 Tooling API 标注。类似/services/data/v48.0/tooling/query?q=SELECT QualifiedApiName, Metadata FROM FieldDefinition WHERE EntityDefinition.QualifiedApiName = 'Account' AND QualifiedApiName = 'Ownership__c'
【讨论】: