Knowledge - ASP

Einführung

Im folgenden werde ich alle besonderen Lösungen, die mir bei der Arbeit in Projekten im Zusammenhang mit ASP (Active Server Pages) dokumentieren, damit diese nicht vergessen und somit weiterhin verfügbar sind.

Zum Seitenanfang

Erzeugung eines XML-Dokumentes

Diese ASP-Lösung legt eine XML-Datei an, die später mittels XSLT weiterverarbeitet werden kann.

'Objekte definieren
Dim objXML, objDocument
Dim objDeclaration
Dim root, elem1

'Objekte für XML-Erzeugung erzeugen
set objXML=Server.CreateObject("MSXML2.DOMDocument.4.0")
set objDocument=objXML.createDocumentFragment

'Objekt für die XML-Definition
set objDeclaration=objXML.createProcessingInstruction("xml", "version='1.0' encoding='utf-8'")
objXML.appendChild objDeclaration

'Wurzelelement anlegen und einfuegen
set root=objXml.createElement("root")
objXML.appendChild root
root.setAttribute "id", id

'QM-Ast erstellen
set elem1 = objXML.createElement("qm")
root.appendChild elem1
insertSimpleElement elem1, "version", "1.0"
insertSimpleElement elem1, "standort", "Berlin"
insertSimpleElement elem1, "sprache", "deutsch"
insertSimpleElement elem1, "Datum", "05.11.2005"
insertSimpleElement elem1, "author", "Frank Sommer"

'Headline und Text
insertSimpleElement root, "headline", "Überschrift"
insertSimpleElement root, "text", "Toller Text"

'Speichern der XML-Datei
objXml.save "test.xml"

'Aufräumen nicht vergessen
set elem1=nothing
set root=nothing
set text=nothing
set objDocument=nothing
set objDeclaration=nothing
set objxml=nothing

'Prozedur zur Erzeugung eines Elementes mit Textknoten
sub insertSimpleElement(parent, bezeichnung, wert)
	dim simpleElement, brElement
	
	set simpleElement = objXML.createElement(bezeichnung)
	parent.appendChild simpleElement

	'die Umbrüche werden als BR-Tag übernommen
	do 
		'Position des Umbruchs
		pos = InStr(wert, vbcr)
		if pos=0 or isNull(pos) then
			listelement = wert
		else
			listelement = Left(wert, pos-1)
			wert = Mid(wert, pos+1)
		end if
		
		set text = objXML.createTextNode(listelement)
		simpleElement.appendChild text
		
		if pos > 0 then
			set brElement = objXML.createElement("br")
			simpleElement.appendChild brElement
		end if		
	Loop While pos > 0		
end sub
		
Zum Seitenanfang

Aufruf und vorheriges Anlegen einer Batchdatei

In meinem Fall wollte ich aus einer XML-Datei ein PDF erzeugen. Hierfür wollte ich das freie FOP von Apache benutzen. Dies wird auf der Kommandozeile ausgeführt. Für das Anlegen und Ausführen einer Batchdatei hab ich mir dann folgende ASP-Funktion geschrieben.

'Aufruf von FOP auf der Shell als Funktion
Function xml2pdf(strXSLPath, strXMLPath, strPDFPath, strLogFile)
    Dim strCommand
    strCommand = Server.MapPath("\FOP\fop.bat")&" -c "&Server.MapPath("\FOP\userconfig.xml")&" -xsl "  & strXSLPath & " -xml " & strXMLPath & " " & strPDFPath
	
	'strCommand = "dir"
	
	Set fso = Server.CreateObject("Scripting.FileSystemObject")
	strPath = Server.MapPath("./pdf")

	strTempNameBat = fso.GetTempName
	strBatFileName= Replace(strTempNameBat,".tmp",".bat")
	strPathBatFile = strPath & "\" & strBatFileName
	
	'Anlegen des Logfiles
	Set objFile = fso.CreateTextFile(strLogFile, True)
	objFile.Close
	
	'Erstellen einer Batchdatei
	Set objBatFile = fso.CreateTextFile(strPathBatFile, True)
	objBatFile.WriteLine(strCommand & " > " & strLogFile)
	objBatFile.Close
	
	'Ausführen der Batchdatei
	Set objWsh = Server.CreateObject("WScript.Shell")
	xml2pdf = objWsh.Run(strPathBatFile, 0, True)
	
	'Löschen der Batchdatei
	Set MyDelBatFile = fso.GetFile(strPathBatFile)
	MyDelBatFile.Delete

	Set fso = nothing
    Set objWsh = nothing
End Function
		
Note
Damit die Erzeugung und das Ausführen der Batchdatei bzw. des PDF-Dokuments klappt, müssen in den entsprechenden Verzeichnissen der IUSR_Servername- und der IWAM_Servername-User Schreibrecht besitzen.
Zum Seitenanfang

Upload von Dateien

Um Dateien mittels ASP auf den Server zu laden, gibt es von Karsten Samaschke eine sher gute Lösung. Diese ist unter folgendem Link beschrieben. link

In meinem Falls habe ich ein Formular geschrieben, welches noch per JavaScript die Datei-Endung prüft, da es nur erlaubt sein sollte JPG- bzw. GIF-Dateien hochzuladen.

<HTML>
<HEAD>
<title>Bild aussuchen - Dialog</title>
<script language="JavaScript">
	function loeschen1()
	{
		window.close()
	}
	function speichern()
	{
		var val = document.form1.filename.value;
		
		if (val == "") {
			alert("Bitte geben Sie einen Dateinamen ein!");
			document.form1.filename.focus();
   			//return false;
		} else {
			if ((val.toLowerCase().indexOf(".jp")>0) || (val.toLowerCase().indexOf(".gif")>0)) {
				document.form1.submit()
			} else {
				alert("Bitte suche Sie eine JPG oder GIF-Datei aus!");
				document.form1.filename.focus();
    			//return false;
			}
		}
	}
</script>
</HEAD>
<BODY>
<FORM method="POST" action="upload.asp" ENCTYPE="multipart/form-data" id="form1" name="form1">		
	<input type="hidden" name="Auswahl" value="senden"/>
	<table border="0" cellspacing="0" cellpadding="0">
		<tr><td width="100"><strong>neues Bild</strong></td>
			<td><input type="file" name="filename" size="80"/></td></tr>
	</table>
	<table border="0">
	<tr>
		<TD ALIGN="Left" >
			<div id="clearField">
				<a href="javascript:loeschen()"> <img src="/images/button_abbruch.gif" name="abbruch" width="84" height="30" border="0"/></a>
			</div>
		</TD>
		<td> </td>
		<TD ALIGN="Left">
			<div id="clearField">
				<a href="javascript:speichern()"> <img src="/images/button_speichern.gif" name="speichern" width="84" height="30" border="0"/></a>
			</div>
		</TD>
	</tr>
	</table>
</FORM>
</BODY>
</HTML>
		
Zum Seitenanfang

Auslesen von Bildinformationen (Höhe und Breite)

Für diese Funktionalität habe ich bei meinen Recherchen eine DLL-Datei gefunden. Diese muss dann nur auf dem IIS registriert (regserv32) werden.

'Funktion zur Weitebestimmung eines Bildes
Function getWidth(strFileName)
	Dim Img
    set Img = Server.CreateObject ("ImgSize.Check")
    Img.FileName = strFileName
    if Img.Error <> "" then
      Response.Write "An error occurred in processing this image.<br>"
      Response.Write "The error was: <b>" & Img.Error & "</b>"
    else
      getWidth = Img.Width
    end if

    set Img = nothing
End Function
		
Zum Seitenanfang