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.
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
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
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>
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

