Ciao,
gdalbell ha scritto:
- gli id della commesse chekkate li passo tutti tramite querystring divisi da virgola(tieni presente che potrebbero essere anche un centinaio)?
sì, in querystring puoi passare fino a 1-2 Kb di dati. Con un centinaio di valori non sarà molto bello a vedersi ma questo è il problema minore poiché in alternativa potresti anche usare una variabile di sessione. Il vero problema è che, se una sola pagina sarà incaricata di creare tutti e 100 i pdf, potrebbe pure andare in timeout e non riuscire a completare l'operazione. Questo dipende da quanto tempo ci mette a creare ciascun PDF. E non è comunque una bella cosa lasciare che l'utente resti in attesa per un tempo indeterminato.
A questo punto la tua soluzione è migliore perché, volendo, ti permette di far avanzare una barra di progresso che, mano mano, informa l'utente sulla percentuale di completamento.
Casomai valuta l'uso di iframe nascosti anziché popup che si aprono e chiudono davanti gli occhi dell'utente. Questa soluzione, comunque, ha anch'essa un suo difetto: impedisce all'utente di cambiare pagina e lo "blocca" nel suo lavoro.
Non sarebbe meglio se l'utente potesse avviare una procedura di lunga durata che va avanti indipendentemente dalla pagina in cui sta navigando?
Questo richiede un po' più di impegno per essere implementato.
Funziona così: gli id, anziché passarli via querystring o via Session, li inserisci in una tabella del database che puoi chiamare "coda_stampe" o "coda_esportazioni". Dopo aver fatto questo, invoca l'avvio di un servizio worker che, uno per uno, leggerà i record ed eseguirà il lavoro di stampa o di esportazione in PDF.
Il "servizio" può essere un servizio di windows, oppure un
task di Asp.Net.
Se l'utente vuol sapere a che punto è arrivato il lavoro, dovrà visitare un'apposita pagina che recupererà gli ID presenti in coda_stampe o coda_esportazioni e che gli mostrerà quali sono stati lavorati dal servizio e quali no.
Ora, per la generazione dei PDF questo sistema può andar bene, ma è vero anche per la stampa? Se la tua è un'applicazione intranet, può darsi che i suoi utenti si trovino nella stanza affianco a quella del server e quindi avranno un facile accesso alla stampante usata dal server. Altrimenti dovrai ingegnarti in altri modi. C'è una discussione di pochi giorni fa sulla stampa da server.
http://forum.aspitalia.com/forum/post/389074/Mandare-Stampa-File-Lato-Server.aspxgdalbell ha scritto:
- una volta ricevuti gli id delle commesse come si comporta il repeater?
Usa la lista di id come datasource per il repeater. Poi, all'interno del suo ItemTemplate usa l'id corrente per generare il dettaglio della commessa.
gdalbell ha scritto:
- è proprio necessario utilizzare un user control?
No, ma secondo me ti aiuterà a tenere la pagina pulita e leggibile. Inoltre potrai mantenere ben separati i compiti: lo user control penserà a generare il dettaglio di una commessa, mentre la pagina aspx si occuperà di disporle l'una sotto l'altra e in modo che siano stampate una per foglio.
ciao