Messaggio attesa (loadign page)

venerdì 07 marzo 2014 - 16.52

jjchuck Profilo | Senior Member

salve
ho alcune pagine aspx con crystal report che prima di essere caricate impiegano un po di tempo
ho provato alcuni esempi in javascript per inserire un messaggio di attesa che però funzionano solo "un attimo prima del caricamento"...
percui: come posso lanciare una pagina di attesa ...magari anche nel global asax...per tutte le pagine che impiegano tempo?

sono fiducioso che qualcuno mi aiuterà... questo forum non mi ha (quasi:)) mai deluso

...tks in advance

ps: dimenticavo che tutte ereditano da una master page

ho trovato questo esempio (l'ultimo presente nel link):http://forums.asp.net/t/1321391.aspx
...da quel poco che capisco la logica è che se ho una pagina che carica lentamente scrivo il codice di esempio in un'altra pagina la quale mi dirotta
a quella desiderata.

Ho provato e funziona...
solo chiedo (in quanto non sono un professionista) se questa è la best practice...ovvero per ogni pagina debbo crearne un altra di appoggio?

ne so poche ma mi pare strano

freeteo Profilo | Guru

Ciao jjchuck,
ci sono vari metodi per mostrare un loading, io mi sono affidato in passato a jQuery per una cosa simile, ma ci sono tante altre piccole funzioncine js che fanno delle cose efficaci.

Quello che volevo capire con te, era se il tempo di caricamento della pagina è dovuto all'elaborazione del report molto complesso, o semplicemente al runtime di Crystal che chiamato la prima volta ci mette tanto, ma alle chiamate successive va via liscio.

Se è quest'ultimo il caso, com'era capitato anche a me, avevo risolto "marginalmente" chiamando in un thread a se stante, all'avvio dell'applicazione un finto report di modo da caricare il runtime "dietro le quinte", e l'utente che si accingeva a fare una stampa aveva un tempo del tutto accettabile...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

jjchuck Profilo | Senior Member

Ciao teo
Grazie per la risposta
Credo si tratti del report...in particolare due i quali hanno una crosstab generata da view abbastanza pesanti (per ottimizzare dovrei rincorrere a sp ma ancora non me la sento )
Cmq nel caso non fosse così come procedo?
Magari il trucchetto aiuta lo stesso
Ciao e grazie ancora

freeteo Profilo | Guru

Ciao,
come ti dicevo prova a lanciare un thread all'avvio dell'applicazione dove crei una variabile di tipo reportDocument e carichi un rpt etc...il tutto "a vuoto" tanto serve solo per caricare in memoria il runtime di Crystal che è abbastanza pesantuccio all'avvio.

Un codice di questo tipo:
Thread t = new Thread(() => { ReportDocument r = new ReportDocument(); r.Load(...) .... }); t.Priority = ThreadPriority.Lowest; t.Start();

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

jjchuck Profilo | Senior Member

ciao teo
ho provato :
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
Dim t As New Thread(Sub()
Dim r As New ReportDocument()
r.Load(Server.MapPath("RunTimeCryst.rpt"))
End Sub)

t.IsBackground = True
t.Priority = ThreadPriority.Lowest
t.Start()
End Sub

ma mi restituisce errore 503 ?

vankraster Profilo | Newbie

hai provato ad aggiungere un UpdateProgress alla pagina, è ciò che ti serve, basta aggiungere un
<asp:UpdateProgress ID="upProgress" runat="server"> <ProgressTemplate> <style type="text/css"> .PRORESS_overlay { position: fixed; z-index: 98; top: 0px; left: 0px; right: 0px; bottom: 0px; background-color: #aaa; filter: alpha(opacity=80); opacity: 0.8; } .PRORESS_overlayContent { /*position: fixed;*/ z-index: 999; margin-left: auto; margin-right: auto; width: 80px; height: 80px; } .PRORESS_overlayContent img { z-index: 999999; padding-top: 300px; } </style> <div class="PRORESS_overlay"> <div class="PRORESS_overlayContent"> <img src="/img/loading.gif" alt="Loading..." width="60" /> </div> </div> </ProgressTemplate> </asp:UpdateProgress>

puoi anche aggiungere un parametro AssociatedUpdatePanelID con l'ID del UpdatePanel associato che ti fa vedere il caricamento solo quando quel'update panel viene ricaricato.

jjchuck Profilo | Senior Member

grazie
ora si ma non va!
...debbo usare una pagina di appoggio come nel link sopra...almeno per ora

cmq vorrei capire come lanciare il runtime di crystal ...un po aiuterà anche quello...

ma il codice che ho postato mi da errore...

freeteo Profilo | Guru

Ciao jjchuck,
hai provato a debuggare?

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

jjchuck Profilo | Senior Member

si ma non ne vengo fuori...

freeteo Profilo | Guru

Ciao jjchuck,
perdona il ritardo nella risposta.

Mi pare di capire che non sei ancora riuscito a fare quello che volevi...a questo punto pensavo, se puoi postare il codice, o allegare un esempio di quello che devi fare, che provo a darci un'occhiata.
Grazie.

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

jjchuck Profilo | Senior Member

ciao Teo
grazie per l'interessamento
non ti preoccupare: le cose da imparare son tantissime !

Il codice è semplicemente quello che ho postato (nel Global.asax) su tuo suggerimento seguendo anche il link che ho postato ...

purtroppo per ora ho creato due pagine per ogni report con un tempo di attesa elevato (come già ti dicevo)

fammi sapere se serve altro

freeteo Profilo | Guru

Quindi tu mi dici che lanciando un thread non hai avuto benefici in termini di tempi di avvio della pagina.
Più di questo non saprei, Crystal lato server è sempre stato un problema...da parecchio tempo infatti non lo uso più e sono migrato a SqlReporting, che devo dire non è proprio una "saetta" ma sicuramente molto meglio di Crystal.

Potresti eventualmente ipotizzare di cambiare il motore di report?

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

jjchuck Profilo | Senior Member

niente: l'esempio non funziona ...la routine su global asax non va

potrei usare il report che di default cè su visual studio...oppure continuare cosi: quando ho un report pesante faccio due pagine e via

freeteo Profilo | Guru

>potrei usare il report che di default cè su visual studio...oppure
>continuare cosi: quando ho un report pesante faccio due pagine
non ho capito questa cosa delle "due pagine", carichi una con un loading e aspetti che l'altra abbia finito per fare un redirect a questa?

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

jjchuck Profilo | Senior Member

esatto...una pagina vuota con una gif viene caricata e quando ha terminato lancia con javascript quella che contiene il report

infatti per questo ti dicevo che la demo trovata in rete non funzionava: in quella si spiega come fare questo metodo per tutte le pagine (global.asax)

per quanto riguarda il runtime di crystal e quindi i tempi (non <<l'estetica>> di cui sopra) ho pure provato (oltre alla rutine che mi dici) a caricare un report vuoto nella pagina di default...ma niente da fare :(
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5