Ottieni l'elenco di tutti i campi obbligatori di sObject in modo dinamico in Salesforce

Aug 23 2020

Voglio creare un elenco di campi contrassegnati come obbligatori a livello di schema. Ho provato sotto lo snippet, funziona benissimo ma fallisce per il campo con valori predefiniti.

Map<String, Schema.SObjectType> m  = Schema.getGlobalDescribe() ;
Schema.SObjectType s = m.get('contact') ;
Schema.DescribeSObjectResult r = s.getDescribe() ;
Map<String,Schema.SObjectField> fields = r.fields.getMap() ;   
 
for(String f : fields.keyset())
{
   Schema.DescribeFieldResult desribeResult = fields.get(f).getDescribe();
   if( desribeResult.isCreateable() && !desribeResult.isNillable() && !desribeResult.isDefaultedOnCreate())
   {
     //This is mandatory/required field 
   }
}

Nota : deve includere campi con valori predefiniti impostati.

Risposte

1 HengkyIlawan Aug 26 2020 at 23:13

La condizione non è necessaria !desribeResult.isDefaultedOnCreate()perché determina se un campo avrà un valore predefinito alla creazione del record.

Se non hai bisogno di campi definiti dal sistema, usaisCustom()

if (desribeResult.isCreateable() 
        && !desribeResult.isNillable()
        && describeResult.isCustom()) {

  //This is mandatory/required field 

}