Capita spesso di dover gestire operazioni lunghe nelle proprie applicazioni, specialmente in ambito gestionale. Questo può portare a un dilemma dell’utente finale che non sa bene come comportarsi.
Infatti quando viene avviata un’operazione lunga l’interfaccia delle applicazioni si deve fermare per aspettare la risposta del server, facendo comparire la classica videata attendere prego che conoscete in molti. Capita anche con le applicazioni fatte con Instant Developer Foundation, ma c’è una soluzione decisamente interessante: usare le Server Session.
Immaginiamo di avere una procedura applicativa che impiega dai 5 ai 60 secondi, nel progetto di esempio potete lanciare il metodo con il comando Long Method, vedrete comparire la barra di attesa per qualche decina di secondi. Noi non vogliamo che l’utente abbia questo tipo di esperienza, vediamo come possiamo fare.
Per prima cosa utilizziamo i metodi di startPhase e trackPhase nel metodo lungo, così da informare l’applicazione dello stato di avanzamento dell’operazione. Nel codice del progetto di esempio viene calcolato un numero casuale di step da 5 a 60, ognuno dei quali dura 1 secondo.
Dopodiché decidiamo di assegnare ad ogni utente, riconosciuto con il proprio username, un numero prefissato di processi indipendenti. Nell’esempio ne ho concesse 3 per ogni utente. Al momento dell’avvio dell’operazione invece di lanciarla immediatamente vediamo se l’utente ha a disposizione una sessione. Ogni sessione è identificata da un nome, nell’esempio UsernameN, dove N rappresenta il numero del processo.
Per avviare un nuovo processo, cioè un’altra sessione applicativa, utilizziamo il metodo startSession, al quale passiamo una query string che identifica l’operazione da lanciare nell’evento di onCommand. Se non ci sono processi disponibili viene mostrato un messaggio in cui si chiede all’utente di riprovare più tardi.
A questo punto dobbiamo informare l’utente di quanti processi ha e qual è il loro stato di avanzamento. Per farlo utilizziamo i metodi existsSession e sessionProgress, mettendo i risultati in una tabella IMDB da mettere a video. E il gioco e fatto.
Che ne pensate? D’ora in poi mai più “attendere prego” .
Quale prossimo trucco ti interesserebbe vedere?
- Web API: pubblicare i dati di un’app direttamente su un sito web
- Mobile: sincronizzazione dati utente multi dominio
- Integrazione di un componente grafico javascript