Поля запросов SOQL Salesforce - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь запросить Salesforce SOQL API, чтобы получить конкретное поле для объекта. Я могу вернуть все поля с помощью конечной точки describe, но есть ли способ получить конкретное поле. Например, как мне получить поле «Владение» и его значения для выбора в учетной записи?

1 Ответ

0 голосов
/ 11 июля 2020

Ownership - это, вероятно, настраиваемое поле, или вы переименовали стандартное?

При описании вызовов это будет что-то вроде Account.Ownership__c.getDescribe().getPicklistValues();. См. Здесь все поля описания методов .

Если вы хотите l oop через все раскрывающиеся списки, доступные для объекта, это будет примерно так:

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 для этого - вы можете запрашивать его по одному полю за раз, он будет в 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'

...