Utilizzare controller standard
Obiettivi di apprendimento
Al completamento di questa unità, sarai in grado di:
- Spiegare cos'è un controller standard di Visualforce e descriverne gli attributi principali.
- Aggiungere controller standard a una pagina Visualforce.
- Visualizzare i dati di un record recuperato dal controller standard di una pagina.
- Scrivere un'espressione che utilizzi la notazione con punti per accedere ai campi di un record correlato.
Introduzione al controller standard di Visualforce
Visualforce utilizza il tradizionale paradigma Model-View-Controller (MVC) e include avanzati controller integrati per gestire le azioni standard e l'accesso ai dati, garantendo un'integrazione semplice e profonda con il database di Lightning Platform. Questi controller integrati vengono generalmente denominati controller standard, o addirittura i controller standard.
Il modello di progettazione MVC permette di separare facilmente la vista e il relativo stile dal database e dalla logica sottostanti. In MVC, la vista (la pagina Visualforce) interagisce con un controller e quest'ultimo fornisce le funzionalità alla pagina. Ad esempio, il controller può contenere la logica da eseguire quando si fa clic su un pulsante. Di norma, un controller interagisce anche con il modello (il database), rendendo disponibili i dati che la visualizzazione potrebbe mostrare o rimandando le modifiche al database.
La maggior parte degli oggetti standard e tutti gli oggetti personalizzati dispongono di controller standard che possono essere utilizzati per interagire con i dati associati all'oggetto, quindi non occorre scrivere personalmente il codice del controller. Puoi estendere i controller standard per aggiungere nuove funzionalità o creare controller personalizzati da zero. In questa sezione verranno spiegati i controller standard.
Trovare un ID record e aggiungerlo all'URL della richiesta
Per fornire un ID record al controller standard, è sufficiente aggiungerlo come parametro nell'URL di richiesta.
Se vuoi usare il controller standard per fare riferimento a un record specifico, il controller deve conoscere l'identificativo, o ID, record con cui operare. L'ID viene utilizzato per recuperare i dati e per salvarli nel database quando i dati del record vengono modificati.
Quando le pagine Visualforce interagiscono con altre pagine dell'organizzazione, è possibile inserire automaticamente l'identificatore del record e la pagina Visualforce può utilizzarlo per cercare e visualizzare i dati del record. Durante lo sviluppo, però, le pagine sono autonome, quindi per visualizzare i dati di un record nel database, è necessario fornire manualmente l'ID record. Il modo più semplice è quello di aggiungerlo come parametro GET nell'URL della richiesta.
- Apri la Developer Console e fai clic su File | New | Visualforce Page (File | Nuovo | Pagina Visualforce) per creare una nuova pagina Visualforce. Inserisci
AccountSummary
come nome della pagina.
- Nell'editor, sostituisci qualsiasi markup con il seguente.Questo markup crea un riquadro in cui è possibile aggiungere informazioni utili.
<apex:page> <apex:pageBlock title="Account Summary"> <apex:pageBlockSection> </apex:pageBlockSection> </apex:pageBlock> </apex:page>
- Fai clic su Preview (Anteprima) per aprire un'anteprima della pagina che potrai guardare mentre apporti le modifiche. Assicurati di vedere il campo URL per la finestra di anteprima. Tra qualche passaggio, ritorneremo a questa azione.
- In una finestra separata del browser, vai alla pagina iniziale dell'organizzazione e seleziona la scheda Account. Se la scheda Account non è visibile, passa all'applicazione Vendite scegliendo Vendite dal menu delle applicazioni nell'angolo in alto a destra.
- Assicurati che nel menu Visualizza sia attiva la visualizzazione Tutti gli account.
- Nella pagina Tutti gli account, fai clic sul nome di un account qualsiasi.
- Al termine del caricamento della pagina dei dettagli account, guarda l'URL della pagina. L'URL avrà un aspetto simile a questo:
https://MyDomainName.lightning.force.com/lightning/r/Account/001D000000JRBes/view
. L'identificatore del record, il suo ID, è la sequenza di lettere e numeri. In questo esempio, è001D000000JRBes
(ma nella tua organizzazione sarà diverso). È univoco per tutti i record di qualunque tipo di oggetto nella tua organizzazione.
- Seleziona l'ID del record e copialo negli appunti. Prima di lasciare la pagina dettagli dell'account, dai un'occhiata alla pagina completa e alle informazioni visualizzate. [Alt text: pagina dei dettagli dell'account] Quella che abbiamo fatto non è stata una deviazione finalizzata a ottenere l'ID di un record. Prima di finire questa sezione, saprai come costruire, da solo, una pagina che visualizzi le stesse informazioni con il codice Visualforce.
- Torna alla pagina di anteprima aperta con la Developer Console. Fai clic nel campo dell'URL della finestra del browser e, alla fine dell'URL, inserisci
&id=
, quindi incolla l'ID record copiato in precedenza. L'URL dovrebbe avere un aspetto simile a questo:https://MyDomainName.lightning.force.com/apex/AccountSummary?core.apexpages.request.devconsole=1&id=001D000000JRBes
- Premi Invio per caricare la pagina con il nuovo URL.
Anche se il caricamento della pagina di anteprima con l'ID record non ha ancora un aspetto diverso, l'aggiunta dell'ID implica che ora puoi chiedere al controller standard di aiutarti a caricare il record e renderlo disponibile nella pagina.
Per visualizzare l'anteprima della pagina nel contesto di Lightning Experience, torna alla finestra principale del browser dove potrai vedere la pagina dettagli dell'account. Dalla pagina dettagli dell'account, apri la console JavaScript del browser e inserisci il seguente codice. Non dimenticare di sostituire pageName
con il nome della tua pagina:
$A.get("e.force:navigateToURL").setParams( {"url": "/apex/pageName"}).fire();
In questo modo è possibile visualizzare anche l'anteprima di una pagina con un ID record, aggiungendo il parametro dell'ID record alla fine dell'URL nel JavaScript:
$A.get("e.force:navigateToURL").setParams( {"url": "/apex/pageName?id=00141000004jkU0AAI"}).fire();
Visualizzare i dati di un singolo record
Aggiungi alla pagina il controller standard per gli account e fai riferimento ai campi account per visualizzare i dati di un record.
Segui questi passaggi partendo dall'URL della pagina che hai caricato nella sezione precedente per creare una pagina in cui è visualizzato il riepilogo dell'account.
- All'inizio del markup della pagina, aggiungi il seguente attributo all'interno del tag
<apex:page>
.standardController="Account"
. Adesso, salvando la pagina, l'anteprima viene ricaricata come prima, ma questa volta il controller standard per gli account è attivo. Quando la pagina viene caricata, il controller standard analizza i parametri dell'URL, trova il parametro ID e utilizza il relativo valore per recuperare un record e renderlo disponibile alla pagina. Non è ancora visibile, ma c'è.
- Nel corpo della pagina, aggiungi il seguente markup.
Name: {! Account.name }
Come vedi, il record viene recuperato. Dovresti vedere il nome dell'account il cui ID record è quello che hai aggiunto all'URL.
- Sostituisci la singola riga contenente il nome account con il seguente markup.Il codice completo dovrebbe presentarsi così.
Name: {! Account.Name } <br/> Phone: {! Account.Phone } <br/> Industry: {! Account.Industry } <br/> Revenue: {! Account.AnnualRevenue } <br/>
Il risultato dovrebbe essere un semplice riepilogo dell'account.<apex:page standardController="Account"> <apex:pageBlock title="Account Summary"> <apex:pageBlockSection> Name: {! Account.Name } <br/> Phone: {! Account.Phone } <br/> Industry: {! Account.Industry } <br/> Revenue: {! Account.AnnualRevenue } <br/> </apex:pageBlockSection> </apex:pageBlock> </apex:page>
In definitiva, cosa sta succedendo? Moltissimo, grazie al controller standard.
- Quando la pagina viene caricata e il componente
<apex:page>
viene attivato, si attiva un controller standard per l'oggetto Account.
- Il controller standard vede che c'è un parametro ID nell'URL, quindi cerca e recupera il record account corrispondente.
- Il controller standard prende il record e lo inserisce in una variabile che rende disponibile alla pagina. La variabile ha lo stesso nome dell'sObject del controller standard: Account. È una variabile oggetto e contiene tutti i campi disponibili nell'sObject Account.
- Le quattro espressioni di Visualforce fanno tutte riferimento alla variabile Account. Utilizzano la notazione con punti per accedere ai singoli campi della variabile Account. Quindi,
{!Account.Name }
recupera il nome dell'account e così via.
Ma cosa succede al numero che indica i ricavi? Viene visualizzato con la notazione scientifica. Come si fa a visualizzarlo come valuta?
Il motivo per cui il numero viene visualizzato come valore "grezzo" con la notazione scientifica è che si tratta di un numero proveniente direttamente da un'espressione, la quale colloca il valore grezzo così com'è sulla pagina. Per controllare la formattazione del valore, è necessario utilizzare un componente e fornire al componente il valore da gestire. Il componente prende il valore grezzo e lo formatta in modo appropriato, per poi provvedere all'output del risultato sulla pagina. Questo argomento viene trattato altrove. In questa sede ci interessa solo accedere ai dati record.
Visualizzare i campi dei record correlati
Per visualizzare i dati di record correlati, si usa la notazione con punti.
Ad esempio, visualizzando i dettagli oggetto per Account, hai forse notato che l'oggetto Account ha un campo chiamato Titolare account e che il relativo tipo è Ricerca(Utente). In altre parole, questo campo presenta una relazione con un record utente. Facendo clic sul link dell'etichetta campo Titolare account, si scopre che il relativo nome campo è Titolare.
La relazione Titolare rappresenta un utente. Se in Setup (Imposta) vai a Object Manager (Gestore oggetti) | User (Utente) | Fields & Relationships (Campi e relazioni), scoprirai che nell'oggetto User (Utente) è presente un campo Name (Nome). Utilizziamo queste informazioni per visualizzarlo.
Nel corpo della pagina, prima del nome account, aggiungi la seguente riga.
Account owner: {! Account.Owner.Name } <br/>
La notazione con punti (Account.Owner.Name
) indica che occorre attraversare la relazione tra i record. Sai che Account.Owner
indica il campo Titolare del record account. Il Name (Nome) aggiuntivo alla fine indica che il campo titolare non è un semplice campo rappresentante una stringa, ma una relazione con un altro record (è un record Ricerca(Utente)) e che tu desideri far rappresentare il record dal valore del campo titolare (è un record User (Utente)) e visualizzare il campo Name (Nome) su quel record.
Ulteriori informazioni...
Il controller standard è molto efficace e ne abbiamo appena scalfito la superficie. Potrai approfondire l'argomento altrove, ma di seguito riportiamo alcuni punti salienti.
Oltre a facilitare l'accesso ai dati, come abbiamo illustrato qui, il controller standard fornisce una serie di azioni standard, come creare, modificare, salvare ed eliminare, che si possono aggiungere alle pagine utilizzando elementi standard dell'interfaccia utente, ad esempio pulsanti e link. Troverai maggiori informazioni su queste azioni standard quando studierai i moduli di input Visualforce e il salvataggio delle modifiche nel database.
Le pagine Visualforce che si vogliono integrare nei layout di pagina di un oggetto, utilizzare come azioni personalizzate specifiche per l'oggetto o utilizzare come schede mobili nell'app Salesforce devono utilizzare il controller standard per l'oggetto in questione.
Se hai creato oggetti personalizzati (anziché utilizzare oggetti come Account) e vuoi sapere come fare riferimento a un campo, devi seguire una procedura leggermente diversa. In Setup (Imposta), inserisci Object Manager (Gestore oggetti) nella casella Quick Find (Ricerca veloce) e seleziona Object Manager (Gestore oggetti) | <il tuo oggetto personalizzato> |Fields & Relationships (Campi e relazioni). Trova il campo desiderato e selezionalo. Il Nome API ora indica il nome del campo che deve essere utilizzato nelle pagine Visualforce. Ad esempio, se il campo si chiama Foo, il suo nome API è Foo__c ed è possibile farvi riferimento con questo nome, qualcosa come: {!myobject__c.foo__c}
.
Per quanto efficace sia il controller standard, a volte è necessario utilizzare qualcosa di diverso. E questo non è un problema in Visualforce. In qualsiasi momento puoi sostituirli o ampliarli e scrivere i tuoi controller o le tue estensioni per i controller integrati, utilizzando il codice Apex.
Risorse
- Visualforce Developer Guide: Standard Controllers (Controller standard)
- Visualforce Developer Guide: Controller di elenco standard
- Salesforce Developers Blog: Twitter Bootstrap and Visualforce in Minutes (Twitter Bootstrap e Visualforce in pochi minuti)