vai al contenuto principale

Selection path

Il Selection path consente di definire rapidamente una condizione di filtraggio su un ruolo di associazione in base a un percorso di relazioni.

Data un’associazione fra un classe sorgente A e una classe destinazione B, un Selection path definito sul ruolo verso B è un cammino alternativo fra la stessa coppia di classi che, dato un oggetto della classe A, individua tutti e soli gli oggetti della classe B ai quali può essere associato.

Aprendo il Custom path selector dal Role menu del ruolo sul quale si vuole definire il Selection path, sono mostrati alcuni cammini alternativi trovati dal Designer; selezionandone uno, le relazioni attraversate sono evidenziate in rosso. Ogni passo del cammino corrisponde all’attraversamento di una relazione, e dunque trova un insieme di oggetti (le istanze già associate della classe su cui punta la relazione). L’ insieme di oggetti associabili sono tutte le istanze raggiungibili attraversando il cammino definito nel Selection path.

Nella figura sono mostrati i primi due Selection path proposti dal Designer per il ruolo di associazione che da Employee entra in Project.

Selection path

Il primo percorso: Employee.city_.branch_.project_.Project

Selection path

Il secondo percorso: Employee.team_.branch_.project_.Project

Definire un Selection path #

Dall’Application Schema , fai click destro su un ruolo per aprire il suo Role menu; seleziona Set selection path... per aprire il Custom path selector e definire il percorso di selezione.

Definire un Selection path

Nel Custom path selector viene mostrato un numero limitato di percorsi. Se il path desiderato non compare tra quelli mostrati, è possibile definirlo manualmente cliccando sull’opzione Define manually...; questo comando apre un Query path editor, dal quale è possibile specificare ogni tappa del cammino in modo analogo a quanto avviene nella definizione di una query, senza però poter applicare condizioni di filtraggio e funzioni di aggregazione.

Definire un Selection path manualmente

Per rimuovere un Selection path, fai click destro sul ruolo su quale è stato definito per aprire il relativo Role menu, e seleziona l’opzione Remove selection path.

Esempio #

Abbiamo modellato un sistema informativo in grado di gestire un’anagrafica degli impiegati (Employee) e di tracciare, per ciascun impiegato, la sede in cui lavora e il computer che utilizza. Il sistema memorizza anche gli uffici presenti in ciascuna sede operativa e la distribuzione dei computer nei vari uffici.

Per impedire che sia possibile assegnare a un impiegato un computer che non è presente presso la sede in cui lavora, abbiamo definito un Selection path sul ruolo verso Computer dell’associazione tra Employee e Computer (perché l’assegnazione dei computer agli impiegati viene fatta dalla maschera di creazione/modifica della classe Empoyee).

Abbiamo quindi selezionato l’opzione Set selection path dal Role menu di computer_: nell’immagine seguente il Designer mostra in rosso l’unico cammino alternativo individuato dal Custom path selector:

Esempio di Selection path

Il Selection path selezionato (Employee.branch_.office_.computer_.Computer) individua i computer associabili a un generico impiegato con il seguente algoritmo che consta di diversi passi, uno per ciascuna relazione attraversata dal cammino:

  1. nel primo passo, l’algoritmo individua la sede in cui l’impiegato lavora, che sarà sempre una sola perché la molteplicità del ruolo verso Branch è (1);
  2. nel secondo passo, per ciascuna sede individuata nel passo precedente (in questo caso una sola), l’algoritmo trova tutti gli uffici collocati in quella sede, che saranno in generale molti perché la molteplicità del ruolo verso Office è (*);
  3. nel terzo passo, per ciascun ufficio individuato nel passo precedente, l’algoritmo trova tutti i computer collocati in quell’ufficio, che saranno in generale molti perché la molteplicità del ruolo verso Computer è (*). I computer così trovati al termine del cammino costituiscono le sole istanze della classe Computer che è possibile assegnare all’impiegato dal quale siamo partiti.

Dato un impiegato, possiamo visualizzare nel seguente diagramma estensionale le relazioni attraversate dal Selection path e gli oggetti individuati a ogni passo.

Diagramma-estensionale