Esempio di utilizzo di document helper per filtrare le query documentali da codice

Se occorre avere, in un progetto Foundation, un filtro per codice della società di collegamento dell’utente solamente sulle tabelle che hanno il campo società è possibile cambiare il codice della where che viene eseguita a runtime subito prima della sua esecuzione.
Inoltre vogliamo anche che se si collega un utente che non ha la società definita (perché è il direttore per esempio) allora il filtro non deve essere applicato.

Per realizzare questa possibilità senza modificare tutte le query si può utilizzare un Document Helper come da esempio che potete scaricare al link qui sotto.

Filtro Società.zip (1,0 MB)
L’esempio è in versione 21.5.

Il funzionamento del Document Helper lo trovate nell’articolo sui Servizi DO nel sito della documentazione di Instant Developer Foundation.

Vi spiego brevemente come funziona.
Per la login posso utilizzare:
user: 1 (società S0001)
user: 2 (società S0002)
accesso senza user (nessuna società)
Non occorre indicare nessuna password.

Nel progetto è definito un documento che eredita da IDDocumentHelper.
Occorre globalizzare l’evento OnSQLQuery dell’oggetto IDDocument.

Nell’evento globale è stato scritto il codice per aggiungere alla where clause il filtro per società solo nel caso che l’utente sia di una particolare società.
Per identificare il campo sul quale applicare il filtro è stato utilizzato un dominio con uno specifico concetto.

3 Mi Piace

Un metodo più strutturato, ma forse più invasivo, è utilizzare il servizio documentale Domini, spiegato al capitolo 5.8.4 della guida. In questo modo, anche tutte le altre qry (che non passano dalla classe DO) saranno filtrate.

2 Mi Piace

Grazie del suggerimento @r.bianco ho voluto postare un esempio fuori da quel servizio perché spesso può essere un pochino invasivo come dici tu e questa può essere una soluzione semplice e veloce. Certo tutte le query non DO sono tagliate fuori dalla mia soluzione.

1 Mi Piace

Sì, in effetti anche noi abbiamo usato il servizio documentale “Domini”, ma lo troviamo abbastanza invasivo.
Questo metodo indicato da Paolo mi sembra un’ottima idea a cui non avevo mai pensato.

1 Mi Piace

@francesco.guarnotta mi fa piacere che lo trovi utile, l’ho proprio realizzato per evitare l’invasività del servizio Domini.