Le relazioni fra oggetti in Salesforce sono basate sui sistemi relazionali dei database.
Prima di scendere in dettaglio su i tipi di relazione in Salesforce, ecco una breve introduzione sulle differenti tipi di relazioni che si possono avere in un database relazionale:
- 1:N, un record di una tabella X (detto record padre) potrà essere associato a più record della seconda tabella Y (record di dettaglio), ma un record della tabella Y potrà essere associato soltanto ad un record della tabella X.
- 1:1, un record di una tabella potrà essere associato soltanto ad un record dell’altra tabella e viceversa.
Un classico esempio è la relazione che esiste fra persona e codice fiscale: una persona può avere soltanto un codice fiscale e un codice fiscale può identificare una sola persona. - M:N un elemento della tabella X può essere legato ad N elementi della tabella Y e viceversa. Un esempio è quello di una relazione tra la tabella Posizione lavorativa e Candidato. Un Candidato potrà effettuare diverse candidature per differenti posizioni lavorative nella stessa azienda e una Posizione lavorativa ammette più candidati.
In salesforce è possibile creare diversi tipi di relazione 1:N.
Tipi di relazione 1:N in Salesforce
Master-detail
è un tipo di relazione che associa due oggetti in modo molto stretto. L’oggetto padre controlla alcuni comportamenti dell’oggetto figlio:
- Quando si elimina un record dell’oggetto padre, tutti i record di dettaglio associati vengono eliminati a loro volta.
- Il campo owner per i record di dettaglio non può essere modificato. Non è disponibile al layout e viene valorizzato direttamente con l’owner del padre.
- I record di dettaglio ereditano le impostazioni di visibilità e sicurezza dall’oggetto padre e non è possibile cambiarle.
- Quando si ha una relazione di tipo master-detail, essa diventa obbligatoria.
- L’oggetto di tipo master può essere sia un oggetto standard che un oggetto custom.
- Ogni oggetto custom può avere un massimo di due relazioni master-detail.
Lookup relationship
Una relazione di tipo lookup associa due oggetti in una relazione di tipo 1:N. Si tratta di una relazione “più debole” rispetto a quella master-detail infatti il campo di lookup non è obbligatorio.
Quando creiamo un campo di tipo lookup possiamo:
- Scegliere se rendere il campo obbligatorio o no.
- Vietare di eliminare un record quando esso è associato ad un altro.
- Quando creiamo il campo di lookup possiamo inserirlo nel layout dell’oggetto di dettaglio affinché possa valorizzare il campo, mentre nel layout dell’oggetto padre possiamo inserire una related list per vedere tutti i record di dettaglio correlati.
External lookup
È un particolare tipo di lookup che collega un un oggetto di dettaglio che può essere standard o custom, con l’oggetto padre che però è un oggetto esterno a Salesforce. In questo caso si utilizza l’External Id standard come chiave esterna. Tutte le informazioni dell’oggetto esterno si trovano in un data source esterno rispetto a Salesforce.
Indirect Lookup
È un particolare tipo di lookup che lega un oggetto di dettaglio esterno con un oggetto padre Standard o Custom interno a Salesforce.
Quando si crea questo tipo di relazione è necessario scegliere un external id nell’oggetto padre affinché corrisponda con il campo di relazione all’oggetto figlio.
Come introdotto in precedenza, quando si hanno due diverse tabelle in un database si possono creare anche relazioni di tipo M:N e 1:1. Come creare questo tipo di relazioni in Salesforce?
Relazioni M:N in Salesforce
Per creare una relazione M:N in Salesforce è necessario creare una terza tabella che sarà oggetto di dettaglio per le due tabelle principali.
Per esempio per la relazione Posizione Lavorativa e Candidato sarà necessario creare un terzo oggetto (chiamato oggetto di giunzione o Junction Object) chiamato Candidatura, che avrà una relazione N:1 con l’oggetto posizione lavorativa e con Candidato.
Che tipo di relazione scegliere? Secondo le best practices la relazione più opportuna da scegliere è quella di master-detail perchè questo oggetto è stato creato appositamente per mappare una relazione M:N tra due oggetti principali.
Nella realtà però può succedere che sia necessario utilizzare come tipo di relazione una semplice lookup per evitare di aggiungere vincoli troppo stringenti.
Relazioni 1:1 in Salesforce
In salesforce non è possibile creare relazioni 1:1, però ci sono alcuni scenari in cui è necessario creare questo tipo di relazioni. Come fare allora?
- Creare due campi di lookup tra i due oggetti.
- Nascondere le Related List dai rispettivi layout.
- Se si valorizza la relazione in uno dei due oggetti, creare un automatismo che valorizzi l’altra relazione.
- Creare dei meccanismi di validazione per cui se il record è già stato associato, non potrà più essere associato ad altri.
I passi indicati sopra non sono l’unica soluzione possibile per creare una relazione di tipo 1:1. L’essenziale è fare in modo che un record di un oggetto non sia assegnabile a più di un record.
Considerazioni nell’utilizzo delle relazioni
- È possibile convertire una relazione lookup in una master-detail se non esistono nell’oggetto padre dei roll-up summary fields.
- Se si cambia la relazione in lookup l’OWD dell’oggetto cambia a public read-write.
- È possibile convertire una relazione da lookup a master-detail se tutti i record figli hanno valorizzato il campo di relazione.
- Se si cambia una relazione n master-detail, l’OWD dell’oggetto récord diventa
“Controlled By Parent” - Gli oggetti standard non possono essere utilizzati come oggetto dettaglio in una relazione master-detail con un oggetto Custom.
Per conoscere in dettaglio tutti i limiti delle diverse relazione qui un articolo dalla documentazione ufficiale Salesforce.
0 commenti