News... | Hack-Acad | Downloads | Web-Projekte | System-Check | Kontakt
HACKACAD - ASP Progressbar

Situation: Eine komplexe Datenbankabfrage über tausende von Datensätzen, die zur Bearbeitung je nach Auslastung lange dauern kann. Wie kann man nun mittels ASP dem Benutzer eine Art Fortschrittsanzeige zeigen?

Der untenaufgeführte Quellcode wird zunächst ein Text-Eingabefeld und einen Submit Button zeigen. Die Texteingabe stellt den numerischen Wert der max simulierten, zu bearbeitenden Datensätze dar. Im Verlauf des Skripts wird der Variable jobs ein Zufallswert zugeordnet der im Bereich 1 bis Eingabe liegt.

Die SUB Routine PercentageToArray berechnet welchen Prozentanteil ein Datensatz am Gesamten hat. Daraus erfolgt die Zusammenstellung wieviel Prozent nach jedem Datensatz erledigt sind.

Der eigentliche Fortschrittsbalken ist ein farbiges JPG dessen Breite dynamisch während des "Abarbeitens" per Javascript geändert wird. Wer auf JS verzichten muss, kann die Ausgabe auch so anpassen das ein JPG mit der jeweiligen Breite neben dem vorherigen angelegt wird.

Der fubar() Auruf ist hier nur als Verzögerung eingebunden um die Verarbeitung zu simulieren.

 

<% 
	Server.ScriptTimeout = 9000 
	subbut = request("do_it")
	to_val = request("to_val")	
%>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Progressbar V2.0</title>

<script>

</script>
</head>

<body>
<% 
if subbut = "go" then 
	

	subbut	= ""
	p		= 0
	Dim	widthArr

	jobs 	= getRandNum(to_val)
	Call PercentageToArray()

	
%>
	Jobs to do: <b><%=jobs%></b><br>
	1 Percent:  <b><%=p%></b><br>
		
	<table width="160px" height="10px" cellspacing="0" cellpadding="0" border="0">
	<tr>
	   <td width="30px" align="right" style="font-size:8pt">0% </td>
	   <td width="100px" height="10px">
	     <div style="background-color:#000000;border:1px solid red;width:100px; height:10px;">
	     <img src="filler.jpg" id="filler" width="1" height="10px">
         </div>
	   </td>
	   <td width="30px" style="font-size:8pt"> 100%</td>
	</tr>
	</table>

<%
	for i = 0 to jobs-1
		
		fubar()
		
		if widthArr(i) > 0 then
		width = width + CInt(widthArr(i))
		%>
		<script>document.getElementById("filler").width=<%=width%>;</script>
		<%
		end if
	next	
	
end if 
%>

<form method="post" action="progressbar.asp">
<input type="text" size="4" maxlength="4" name="to_val" value="5000"><br>
<input type="submit" name="do_it" value="go">
</form>
</body>

</html>

<%
function getRandNum(ByVal range)
	randomize
	getRandNum = Int((range - 1 + 1) * Rnd + 1)
end function

function fubar()
	a = Timer()
	
	while (b < a + 0.1)
		b = Timer()
	wend
	

end function

sub PercentageToArray()
	p 		= 100/jobs
	tmp 	= p
	toArray = ""
	total	= 0
	
	for i = 0 to jobs-1
		
		if tmp < 1 then
			toArray = toArray & "0,"
		else
			toArray = toArray & CStr(FIX(tmp)) & ","
			total 	= total + FIX(tmp)
			tmp = tmp - FIX(tmp)
		end if			

		tmp = tmp + p
	next
	
	if total = 99 then toArray = toArray & "1,"
	widthArr = split(Left(toArray,(len(toArray)-1)),",")	

end sub	
%>