 |
In Hoofdstuk 13 van 'Leer jezelf Pro… ColdFusion MX' beloofden we u een voorbeeld te geven hoe u in CF gegevens vanuit een complete database tabel, via een browser, kunt 'inladen' in een direct bewerkbaar MSWord bestand.
Op het gevaar af te in de voetsporen van uw oude wiskunde leraar te treden (altijd dertig oplossingen beschikbaar voor één het hetzelfde probleem): we geven u er 3. |
| |
|
De eerste twee borduren voort op wat u al in paragraaf 'Interactie met
Word en dynamische grafieken' heeft gelezen. U zult merken dat er bijster
weinig geheimzinnigs aan is! Je verzint het waar je bij staat...
Is de meest simpele, maar levert in Word wel wat lay-out technische 'rotzooi'
op. U bent gewaarschuwd!
Het .cfm bestand begint met een CFQUERY om gegevens uit de databasetabel
te halen (hier is dat de tblGames uit de GamesOnline database, maar dat
kan natuurlijk willekeurig elke andere tabel of database zijn):
<!--- Reserveer alleen output van datgene dat binnen CFOUTPUT
tags staat --->
<CFSETTING ENABLECFOUTPUTONLY = "Yes">
<CFQUERY NAME = "games_overzicht" DATASOURCE = "GamesOnline">
SELECT Titel, Pitchtekst, Categorie, VerschijningsDatum,
Uitgever,
Platform, Beschrijving
FROM tblGames
ORDER BY Categorie
</CFQUERY>
Vervolgens worden een paar variabelen aangemaakt om de layout van de
pagina te beinvloeden:
<!--- Zet variabelen naar speciala asci karakters --->
<!---tabje--->
<CFSET TabChar = CHR(9)>
<!---regeldoorvoer--->
<CFSET NieuweRegel = Chr(13) & Chr(10)>
Net als in het boekvoorbeeld wordt nu in de <CFHEADER> gebruik
gemaakt van MIME-types om de betreffende applicatie te
openen:
<!---Zet de MIMEtype op Word, zodat Word opgestart wordt--->
<!---gebruik "application/msword" voor Microsoft Word--->
<CFCONTENT TYPE = "application/msword">
<!---Geef een suggestie voor een bestandsnaam op--->
<CFHEADER NAME = "Content-Disposition" VALUE ="attachment;
filename=GamesOverzicht.doc">
Tenslotte worden de gegevens vanuit de QUERY in Word 'geplakt':
<!---Zet een tabelkopje--->
<CFOUTPUT>TITEL#TabChar#CATEGORIE#TabChar#PITCHTEKST#TabChar#PLTFORM#
TabChar#UITGEVER#NieuweRegel#</CFOUTPUT>
<!--- de feitelijke uitvoer van gegevens naar Word--->
<CFLOOP QUERY = "games_overzicht">
<CFOUTPUT>
#Titel##TabChar##Categorie##TabChar##Pitchtekst##TabChar##Platform#
#TabChar##Uitgever##NieuweRegel#
</CFOUTPUT>
</CFLOOP>
Dat is 't.
Als u deze code laat lopen, zult u zien dat dit nogal wat 'bagger' in
Word veroorzaakt.
Met de Word menuoptie Tabel > Converteren > Tekst naar tabel is er nog het een en ander te redden.
Biedt lay-out technisch een beter en strakker resultaat.
Het maakt domweg gebruik van de mogelijkheid in Word om HTML code te importeren.
Wat u dus dadelijk ook gaat doen is in CF een HTML-tabel aanmaken...
Het .cfm bestand begint weer met een <CFQUERY> om alle gegevens
uit een databasetabel te halen:
<CFQUERY NAME = "games_overzicht" DATASOURCE = "GamesOnline">
SELECT GameId, Titel, Pitchtekst, Categorie, VerschijningsDatum,
Uitgever,
Platform, Beschrijving
FROM tblGames
ORDER BY Categorie
</CFQUERY>
Ook hier maakt u in de <CFHEADER> gebruik van MIME-types om de betreffende applicatie te openen:
<!---Zet de MIMEtype op Word, zodat Word opgestart wordt--->
<!---gebruik "application/msword" voor Microsoft Word
of
gebruik "application/vnd.stardivision.writer" voor OpenOffice
of
gebruik "application/msexcel" om het spulletje in een spreadsheet
te zetten--->
<CFCONTENT TYPE = "application/msword">
<!---Geef een suggestie voor een bestandsnaam op--->
<!---Gebruik deze CFHEADER voor export naar Word of OpenOffice--->
<CFHEADER NAME = "Content-Disposition" VALUE ="attachment;
filename=GamesOverzicht.doc">
Wilt u het spulletje in plaats van in Word of OpenOffice inladen in
een Excel bestand, dan kan dat ook.
Verander dan:
<CFCONTENT TYPE = "application/msword">
in
<CFCONTENT TYPE = "application/msexcel">
en
<CFHEADER NAME = "Content-Disposition" VALUE ="attachment;
filename=GamesOverzicht.doc">
in
<CFHEADER NAME = "Content-Disposition" VALUE ="attachment;
filename=GamesOverzicht.xls">
Vervolgens maakt u in gewone HTML een tabel aan met een <CFOUTPUT
QUERY>
om de gegevensuitvoer naar Word/Excel/OpenOffice te realiseren:
<html>
<head>
</head>
<body>
<FONT size="4" face="Papyrus">GamesOnline
- Gamesoverzicht</FONT></TD>
<P><font size="2" face="Verdana, Arial,
Helvetica, sans-serif">Ons fantastische
aanbod aan Gamezzz.<br>
(Surf voor de meest actuele cheats en tips naar <b>www.gamesonline.nl</b>!)</font>
</P>
<TABLE width="90%" border="0" cellpadding="0"
cellspacing="0">
<TR align="left" valign="top" bgcolor="#697A87">
<TD><em><B><FONT color="#FFFFFF"
size="3" face="Papyrus">Titel</FONT></B></em></TD>
<TD><em><B><FONT color="#FFFFFF"
size="3" face="Papyrus">Categorie</FONT></B></em></TD>
<TD><em><B><FONT color="#FFFFFF"
size="3" face="Papyrus">Pitch</FONT></B></em></TD>
<TD><em><B><FONT color="#FFFFFF"
size="3" face="Papyrus">Platform</FONT></B></em></TD>
<TD><em><B><FONT color="#FFFFFF"
size="3" face="Papyrus">Uitgever</FONT></B></em></TD>
</TR>
<TR align="left" valign="top">
<TD></TD> <TD></TD> <TD></TD>
<TD></TD> <TD></TD>
</TR>
<CFOUTPUT QUERY = "games_overzicht">
<TR align="left" valign="top">
<TD><FONT size="2" face="Papyrus">#TITEL#</FONT></TD>
<TD><FONT size="2" face="Papyrus">#CATEGORIE#</FONT></TD>
<TD><FONT size="2" face="Papyrus">#PITCHTEKST#</FONT></TD>
<TD><FONT size="2" face="Papyrus">#PLATFORM#</FONT></TD>
<TD><FONT size="2" face="Papyrus">#UITGEVER#</FONT></TD>
</TR>
</CFOUTPUT>
<TR align="left" valign="top">
<TD></TD> <TD></TD>
<TD></TD> <TD></TD> <TD></TD>
</TR>
</TABLE>
</body>
</html>
Dat is alles!
Voer het bestand uit en u ziet dat, vanuit uw webpagina, MSWord wordt
opgestart met daarin - nu keurig in tabel - ALLE gegevens uit de gamestabel.
Natuurlijk kunt u dit truukje ook met queries uit twee of meer tabellen
uitvoeren!
En oplossing 3?…
…Werkt via COM.
COM (Component Object Model) is een architectuur, ontwikkeld door Microsoft,
waarmee applicaties van elkaars functionaliteit gebruik kunnen maken.
Vanuit een ColdFusion webpagina kunt u - via het web - met COM - maar ook met CORBA en Java - functies
binnen andere applicatie (lokaal of op internet) aansturen en aangespreken.
Het spreekt van zelf dat het overhevelen van database-gegevens daarin
één van de opties is.
COM, CORBA en Java zijn echter aparte verhalen die buiten het bestek
van 'Leer jezelf…' vallen.
Mocht u er in geïnteresseerd zijn: in de documentatie op de CD-Rom
staan referenties naar het werken met CORBA, COM en Java.
Beide bronbestanden uit dit voorbeeld vindt u hier.
|