Utilizzare gli sObject
Obiettivi di apprendimento
Al completamento di questa unità, sarai in grado di:
- Descrivere la relazione tra sObject e record di Salesforce.
- Creare e utilizzare variabili sObject specifiche.
- Assegnare un sObject generico a un sObject specifico.
Utilizzare gli sObject
Poiché Apex è strettamente integrato con il database, è possibile accedere ai record di Salesforce e ai rispettivi campi direttamente con Apex. Ogni record di Salesforce è rappresentato in modo nativo come un sObject in Apex. Ad esempio, il record dell'account Acme corrisponde a un sObject Account in Apex. I campi del record Acme che puoi visualizzare e modificare nell'interfaccia utente possono essere letti e modificati anche direttamente nell'sObject.
Nella tabella seguente sono riportati alcuni campi popolati del record di esempio dell'account Acme. L'sObject Account è un'astrazione del record dell'account e salva in memoria le informazioni relative ai campi dell'account.
Tabella 1. sObject Account per un record recuperato
Campo account |
Valore |
---|---|
ID |
001D000000JlfXe |
Name |
Acme |
Phone |
(415) 555-1212 |
NumberOfEmployees |
100 |
Ciascun record Salesforce è rappresentato come sObject prima di essere inserito in Salesforce. Analogamente, quando i record salvati in modo permanente vengono recuperati da Salesforce, vengono memorizzati in una variabile sObject.
I record degli oggetti standard e personalizzati in Salesforce corrispondono ai rispettivi tipi di sObject in Apex. Ecco alcuni nomi di tipi di sObject comuni in Apex utilizzati per gli oggetti standard.
- Account
- Contact
- Lead
- Opportunity
Se hai aggiunto oggetti personalizzati nella tua organizzazione, utilizza i loro nomi API in Apex. Ad esempio, un oggetto personalizzato chiamato Merce corrisponde all'sObject Merce__c in Apex.
Creare variabili sObject
Per creare un sObject, occorre dichiarare una variabile e assegnarle un'istanza di sObject. Il tipo di dati della variabile è il tipo sObject.
L'esempio seguente crea un sObject di tipo Account con il nome Acme e lo assegna alla variabile acct
.
Account acct = new Account(Name='Acme');
sObject e nomi dei campi
Apex fa riferimento a sObject standard o personalizzati e ai relativi campi utilizzandone i nomi API univoci.
I nomi API degli oggetti e dei campi possono differire dalle rispettive etichette. Ad esempio, l'etichetta del campo Employees (Dipendenti) è Employees (Dipendenti) e questa è l'etichetta visualizzata nella pagina dei record account, ma il nome API del campo è NumberOfEmployees. Per accedere a questo campo in Apex, è necessario utilizzare il nome API del campo: NumberOfEmployees.
Di seguito sono riportate alcune regole utilizzate per i nomi API degli oggetti e dei campi personalizzati.
Per gli oggetti e i campi personalizzati, il nome dell'API termina sempre con il suffisso __c. Per i campi relazione personalizzati, il nome dell'API termina sempre con il suffisso __r. Ad esempio:
- Un oggetto personalizzato con l'etichetta Merce ha un nome API Merce__c.
- Un campo personalizzato con l'etichetta Descrizione ha un nome API Descrizione__c.
- Un campo relazione personalizzato con l'etichetta Elementi ha un nome API Elementi__r.
Inoltre, gli spazi presenti nelle etichette sono sostituiti da caratteri di sottolineatura nei nomi API. Ad esempio, il nome di un campo personalizzato Anzianità dipendente ha come nome API Anzianità_dipendente__c.
Trovare i nomi degli oggetti e dei campi
Per trovare i nomi degli oggetti standard e dei rispettivi campi da utilizzare in Apex, consulta la guida di riferimento agli oggetti per Salesforce Platform.
Sia per gli oggetti standard che per quelli personalizzati, cerca i nomi API degli oggetti e dei campi nell'organizzazione. In Setup (Imposta), fai clic sulla scheda Object Manager (Gestore oggetti) a destra della scheda Home (Pagina iniziale), quindi fai clic sul nome dell'oggetto.
Creare sObject e aggiungere campi
Per poter inserire un record di Salesforce, è prima necessario crearlo in memoria come sObject. Come ogni altro oggetto, anche gli sObject vengono creati con l'operatore new
:
Account acct = new Account();
Il nome API dell'oggetto diventa il tipo di dati della variabile sObject in Apex. In questo esempio, Account
è il tipo di dati della variabile acct
.
L'account a cui fa riferimento la variabile acct
è vuoto perché non abbiamo ancora compilato alcun campo. Ci sono due modi per aggiungere campi: attraverso il costruttore o utilizzando la notazione con punti.
Il modo più veloce per aggiungere i campi è quello di specificarli come coppie nome-valore all'interno del costruttore. Ad esempio, questa istruzione crea un nuovo sObject account e compila il suo campo Nome con un valore di stringa.
Account acct = new Account(Name='Acme');
Il campo Name è l'unico campo obbligatorio per gli account, il che significa che deve essere compilato prima che sia possibile inserire un nuovo record. Tuttavia, è possibile compilare anche altri campi per il nuovo record. Questo esempio prevede anche l'aggiunta di un numero di telefono e del numero di dipendenti.
Account acct = new Account(Name='Acme', Phone='(415)555-1212', NumberOfEmployees=100);
In alternativa, è possibile utilizzare la notazione con punti per aggiungere campi a un sObject. Il seguente esempio è equivalente a quello precedente, anche se richiede qualche riga di codice in più.
Account acct = new Account(); acct.Name = 'Acme'; acct.Phone = '(415)555-1212'; acct.NumberOfEmployees = 100;
Lavorare con il tipo di dati sObject generico
In genere, quando si lavora con gli sObject, si utilizza il tipo di dati sObject specifico, ad esempio Account per un oggetto standard oppure Libro__c per un oggetto personalizzato chiamato Libro. Tuttavia, se non si conosce il tipo di sObject che il metodo deve elaborare, è possibile utilizzare il tipo di dati sObject generico.
Le variabili dichiarate con il tipo di dati sObject generico possono fare riferimento a qualsiasi record Salesforce, sia esso un record oggetto standard o personalizzato.
L'esempio seguente mostra come qualsiasi oggetto Salesforce, ad esempio un account o un oggetto personalizzato chiamato Book__c, possa essere assegnato a una variabile sObject generica.
sObject sobj1 = new Account(Name='Trailhead'); sObject sobj2 = new Book__c(Name='Workbook 1');
Viceversa, le variabili dichiarate con un tipo di dati sObject specifico possono fare riferimento solo ai record Salesforce dello stesso tipo.
Eseguire il cast di sObject generici in tipi di sObject specifici
Quando si ha a che fare con sObject generici, a volte è necessario eseguire il cast di variabile sObject in un tipo di sObject specifico. Uno dei vantaggi di questa operazione è la possibilità di accedere ai campi utilizzando la notazione con punti, che non è disponibile nell'sObject generico. Poiché sObject è il tipo da cui derivano tutti i tipi di sObject specifici, è possibile eseguire il cast di un sObject generico in un sObject specifico. Questo esempio mostra come eseguire il cast di un sObject generico in un Account.
// Cast a generic sObject to an Account Account acct = (Account)myGenericSObject; // Now, you can use the dot notation to access fields on Account String name = acct.Name; String phone = acct.Phone;
Ulteriori informazioni...
I campi di un sObject generico sono accessibili solo tramite i metodi put()
e get()
.
In questa unità hai imparato cosa sono gli sObject e come usarli. Tuttavia, la creazione di un sObject non ne comporta il salvataggio permanente come record nel database. Per salvare l'sObject come record e utilizzarlo in altri modi, è necessario usare il Data Manipulation Language (DML). Per recuperare un record, è necessario utilizzare il Salesforce Object Query Language (SOQL). Per saperne di più su DML e SOQL, consulta le unità successive.
Risorse
- Guida di riferimento agli oggetti per Salesforce Platform
- Apex Developer Guide: Working with sObjects (Guida per gli sviluppatori Apex: Lavorare con gli sObject)
- Apex Developer Guide: SObject Methods (Guida per gli sviluppatori Apex: Metodi degli sObject)