Uso delle relazioni uno-a-molti

Completato

Le relazioni uno-a-molti sono le relazioni Dataverse che si usano più comunemente. Questa unità riprende lo scenario relativo alla soluzione delle aree di lavoro condivise (condivisione della scrivania) in Contoso. Per illustrare come usare le relazioni in un'app canvas, gli esempi seguenti impiegano la relazione tra le tabelle Ubicazione e Scrivania. Il diagramma seguente è una visualizzazione della relazione e dei dati corrispondenti.

Se si desidera consentire a un utente di selezionare un'ubicazione e visualizzare le scrivanie dell'ubicazione in una raccolta sottostante, è possibile creare una schermata simile all'esempio seguente.

Come nel caso della maggior parte delle origini dati, è possibile usare la funzione Filter() per filtrare le scrivanie in modo da visualizzare solo quelle per l'ubicazione selezionata. La formula avrà l'aspetto simile all'esempio seguente, dove FilterLocation_1 è il nome dell'elenco a discesa.

Poiché si sta usando una relazione uno-a-molti Dataverse, è possibile usare la notazione con punto Control.Selected.Desks per fare riferimento alle scrivanie dell'ubicazione, come illustrato nella seguente formula.

In questo esempio, entrambe le formule restituiscono lo stesso elenco di scrivanie correlate all'ubicazione selezionata. L'uso della notazione con punto è più semplice e conciso rispetto a quello della funzione Filter().

Quando si esplora una relazione uno-a-molti usando la sintassi di notazione con punto, per impostazione predefinita si ottengono tutti i record correlati. È possibile usare un filtro per applicare più criteri alle righe correlate. L'espressione seguente usa la relazione uno-a-molti e filtra anche i risultati in base allo stato attivo.

Filter(FilterLocation_1.Selected.Desks, Status = 'Status (Desks)'.Active)

Inoltre è possibile usare la relazione a partire dalla riga della scrivania. Si consideri un esempio in cui, nella raccolta, si desidera visualizzare l'indirizzo dell'ubicazione per ogni scrivania. L'utente potrebbe avere dimestichezza con la funzione di ricerca per recuperare il record dell'ubicazione e con l'accesso alla colonna dell'indirizzo come proprietà.

Invece della formula Lookup() è possibile usare la notazione con punto e fare riferimento a ThisItem.Location.Address

L'utente non è limitato a un unico livello di esplorazione della relazione. Ad esempio, se si dispone di un'ubicazione con un contatto principale correlato e si desidera visualizzare la colonna del nome completo, è possibile comporre la seguente formula:

ThisItem.Location.'Primary Contact'.'Full Name'

Grazie alla notazione con punto è possibile includere rapidamente i dati correlati, indipendentemente dal lato della relazione da cui si inizia.

Il modo più semplice per stabilire la relazione uno-a-molti consiste nell'usare un modulo di modifica per creare o aggiornare la riga correlata. Quando si aggiunge la colonna di ricerca al modulo, viene usata la funzione Choices() per presentare i valori possibili all'utente. L'esempio seguente mostra il processo di aggiunta di una riga per la scrivania in cui la colonna di ricerca dell'ubicazione viene aggiunta al modulo.

Le proprietà avanzate del controllo a discesa mostrano come è impostata la proprietà Items.

Grazie alla funzione Choices() si elimina la necessità di aggiungere la tabella di ricerca come un'altra origine dati. Il risultato della funzione Choices() è una tabella. Pertanto è possibile aggiungere più opzioni di filtro e ordinamento, come descritto di seguito:

Filter(Choices([@Desks].contoso_Location), Status ='Status (Locations)'.Active)

Se si dispone già del valore di ricerca che si desidera impostare (ad esempio, durante la creazione di un record per la scrivania nella schermata Ubicazione), è possibile impostare la proprietà DefaultSelectedItems per il valore della scheda dati e quindi impostare la proprietà Visible del campo del modulo su Off. Questa impostazione consente la trasmissione del valore predefinito quando viene richiamata la funzione SubmitForm().

Se si usa la funzione Patch() per impostare una colonna di ricerca, impostare il valore della colonna su un record della tabella primaria. L'esempio seguente mostra la creazione di una relazione tra una riga per la scrivania e una riga per l'ubicazione primaria attualmente selezionata nell'elenco a discesa Ubicazione.

Patch(Desks, ThisItem, {Location:FilterLocation_1.Selected})

È inoltre possibile ottenere lo stesso risultato con la funzione Relate(). Il primo parametro è l'elenco delle righe (scrivanie) correlate alla riga primaria (ubicazione), mentre il secondo parametro è la riga (scrivania) da aggiungere all'elenco o correlata.

Relate(FilterLocation_1.Selected.Desks, ThisItem)

Allo stesso modo è possibile usare la funzione Unrelate() per annullare l'associazione delle righe, ad esempio rimuovendo ThisItem (scrivania) dalle scrivanie associate all'ubicazione selezionata FilterLocation_1.Selected.

Unrelate(FilterLocation_1.Selected.Desks, ThisItem)

Quando si usa la funzione Unrelate(), il valore della ricerca primaria per il record correlato viene impostato su Nothing (o null). Si consiglia di evitare le righe orfane perché l'app potrebbe non riuscire a visualizzare la riga senza l'associazione primaria. Nell'esempio di Contoso, se l'elenco delle scrivanie viene visualizzato solo in relazione all'ubicazione, le scrivanie senza ubicazione risultano orfane e inaccessibili tramite l'app. Questa situazione può verificarsi anche come effetto collaterale dell'eliminazione della riga primaria quando la proprietà del comportamento della relazione è impostata in modo da rimuovere il collegamento alle righe correlate.