Blog | On the Web | About me
Daniele Vistalli @ BleedYellow

Search 

Getting social ?

In questi giorni stò letteralmente smontando NSFDB2 per preparare la presentazione che terrò durante il Dominopoint day a settembre.

Una delle novità di NSFDB2 è la possibilità di creare dell Query View ovvero degli elementi di design del client notes che consentono di portare dentro il client o su web delle viste che prendono la informazioni visualizzate da una query SQL eseguita sul database DB2 a cui è connesso il server domino.

Gli scenari che si aprono con questa nuova feature li affronterò al Dominopoint day, nel frattempo per chi stà già sperimentando (come Cristian) vi dò una dritta...

1° Una Query View non è altro che una "definizione" di una query da effettuare su DB2 al momento dell'apertura della view stessa
2° La query SQL da eseguire è specificata da una stringa basata su formule, questo significa che la stringa può essere dinamicamente calcolata al momento dell'apertura della vista
3° Le query view funzionano sia da Web che da Client

Query View parametriche nel client:


Nei giorni scorsi Cristian stava cercando di fare questo ovvero capire come fosse possibile passare dei parametri ad una queryview per avere risultati differenti, beh, io ci ho provato e vi suggerisco questo:

Sappiamo che una query view è una "definizione" di una query sql che viene eseguita al momento dell'apertura e sappiamo che la query eseguita viene calcolata in base ad una formula ogni volta che si effettua l'apertura della vista stessa.

Il trucco diventa semplice, prima di aprire si imposta una variabile notes con la funzione @SetEnvironment o con le funzioni dell'oggetto Session e poi si apre la vista (con @Command([OpenView] .... ) o con NotesDatabase.getView). A questo punto quello che succde è chiaro.

La formula della SQL query deve essere in grado di prendere dall'environment le informazioni per costruire la query da eseguire, per sempio:

"SELECT nomeazienda, numerofattura, datafattura, importo WHERE datafattura >= " + @Environment("Q_DataFattura");


Aprendo una queryview con questa formula la query sql verra calcolata dinamicamente e dinamicamente eseguita restituendo i dati che ci interessano.

Questo meccanismo funziona perfettamente, io ho anche fatto un'altro esperimento utilizzando una @Prompt([OkCancelEdit]; ...) all'interno della SQL query, quando si apre la vista succede quello che ci si aspetta, un prompt ci chiede un parametro che può essere utilizzato per costruire la query stessa.

Attenzione:


Le query view vengono ricalcolate ogni volta che avviene il refresh della vista (che sia la pressione di F9 nel client o il metodo refresh di una NotesView). Quando avviene il refresh anche la query SQL da utilizzare viene ricalcolata per cui se avete già resettato le variabili d'ambiente risultati inaspettati potrebbero verificarsi, pianificate bene cosa vi aspettate prima di avere sorprese.

Query View parametriche via web:


Con domino 7.0.2 e domino 8.0 il supporto alle query view arriva anche su web, questo significa che unq QueryView può essere aperta da web con il solito comando ?openview e con tutte le funzionalità delle query classiche.

In questo caso la funzione @Environment non ci aiuta a costruire la query ma possiamo ricorrere alla @UrlQueryString per estrapolare dalla richiesta web i parametri che ci interessano.

Nel caso di una vista Web
"SELECT nomeazienda, numerofattura, datafattura, importo WHERE datafattura >= " + @UrlQueryString("Q_DataFattura");


Viste Web e Client in un colpo solo


Adesso che abbiamo capito il trucco possiamo anche decidere di semplificarci la manutenzione ed usando delle formule leggermente più complesse creare delle viste parametriche adatte sia per l'uso web che per il client notes.

Per esempio:

Q_DataFattura := @If(@IsMember("$$WebClient"; @UserRoles); @UrlQueryString("Q_DataFattura"); @Environment("Q_DataFattura"));
"SELECT nomeazienda, numerofattura, datafattura, importo WHERE datafattura >= " + Q_DataFattura


Semplice vero ?

Buone sperimentazioni anche a voi



Comments (0)
Daniele Vistalli August 6th, 2007 11:14:35