CFWebForge.com
 
 
   
 
Home      Service      Boeken      Artikelen      Contact     
  De praktijk  
     
   
     
  SharePoint 2007
Het zou handig zijn om je inkomende e-mailberichten direct in je SharePoint website te kunnen bekijken. Alleen --- het configureren van een mailserver in SharePoint heeft nogal wat voeten in aarde.

Gelukkig kan het eenvoudiger. Hier een doe-het-zelf script. 'Old school', maar 't werkt als een tierelier! Meer...
 
     
  Nieuws  
     
   
     
  Artikel over SharePoint 2010 - Sitestatistieken gedropt op http://tinyurl.com/3d5f4gu  
     
  Handboek SharePoint 2010 op de 7e plaats in de * top 15 * best verkochte boeken 2011 bij Computerboek.nl  
 
     
  ColdFusion tutorial - Tabel naar MSWord / MSExcel  
 
 
     
 

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

 

Oplossing 1: table_to_msword_simpel.cfm

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.

 

Oplossing 2: table_to_msword_excel_aanzienlijk_beter.cfm

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.

 

 
   
  copyright © Peter van der Woude