Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Peter Grassl 1 post 21 karma points
    Aug 30, 2010 @ 01:53
    Peter Grassl
    0

    How to build a dynamic SQL query string in xslt?

    Hello everybody,

    I'm new to Umbraco and I "want" to (the right words would be have to) migrate an existing school site from AxCMS to Umbraco (4.0.4.2).
    For the most of the pages it was very easy to create them in Umbraco, but now I'm completely stuck.

    For the courses page, I created a macro for the navigation and an additional macro to display the course data.

    Structure is as follows:

    Offene Seminare
    -- Anwendungs-IT
    ---- Microsoft Office Anwendungen
    ---- Desktop Publishing Anwendungen
    ---- Anwendungen
    --Technische IT
    ---- Netzwerktechnik
    ---- Betriebssysteme
    ---- Zertifizierungen
    ---- Datenbanken
    ---- Programmiersprachen
    ---- Software Engineering
    ---- IT-Management
    -- Betriebswirtschaft/Vertrieb
    -- Internationale Kommunikation
    -- Management und Führung
    -- Gesundheitsmanagement
    Inhouse Seminare
    Online Seminare

    For querying the database I use the sql extension I found in the developers section of Umbraco.TV. It works fine, but is it possible to build the sql query string dynamically?
    I'm not a developer but an administrator, so creating an user control would be the worst case for me ;-)

    My idea is to use a variable depending on the current node I've chosen in the navigation. The xslt-code so far:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
    <xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxml="urn:schemas-microsoft-com:xslt"
    xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" xmlns:sql="urn:sql"
    exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets ">


    <xsl:output method="xml" omit-xml-declaration="yes"/>

    <xsl:param name="currentPage"/>
    <xsl:variable name="MediaNodeId" select="/macro/MediaNode/node/@id"/>

    <xsl:template match="/">


    <xsl:choose>
    <xsl:when test="@nodeName = 'Offene Seminare'">
    <xsl:variable name="where"></xsl:variable>
    </xsl:when>
    <xsl:when test="@nodeName = 'Anwendungs-IT'">
    <xsl:variable name="where">WHERE dbo.AkadSeminare.ThemenbereichGF &lt; 7100</xsl:variable>
    </xsl:when>
    <xsl:when test="@nodeName = 'Microsoft Office Anwendungen'">
    <xsl:variable name="where">WHERE dbo.AkadSeminare.ThemenbereichGF = 7001</xsl:variable>
    </xsl:when>
    <xsl:when test="@nodeName = 'Desktop Publishing Anwendungen'">
    <xsl:variable name="where">WHERE dbo.AkadSeminare.ThemenbereichGF = 7002</xsl:variable>
    </xsl:when>
    <xsl:otherwise>
    </xsl:otherwise>
    </xsl:choose>

    <xsl:for-each select="sql:GetDataSet('Seminare', 'SELECT dbo.AkadSeminare.Titel, dbo.AkadSeminare.ThemenbereichGF, dbo.AkadTermine.Ort, dbo.AkadTermine.SeminarNr, dbo.AkadTermine.Datum, dbo.AkadTermine.Kursdauer, dbo.AkadTermine.Seminarkosten FROM dbo.AkadSeminare INNER JOIN dbo.AkadTermine ON dbo.AkadSeminare.ID = dbo.AkadTermine.SeminarID', 'seminar')//seminar">
    <a href="{SeminarNr}"><xsl:value-of select="Titel"/></a>&nbsp;&nbsp;<a href="#"><img><xsl:attribute name="src"><xsl:value-of select="umbraco.library:GetMedia(1235, 'false')/data [@alias = 'umbracoFile']"/></xsl:attribute></img></a><br />
    SeminarNr: <xsl:value-of select="SeminarNr"/><br />
    <xsl:value-of select="Datum"/> in <xsl:value-of select="Ort"/><br />
    Seminargebühr: <xsl:value-of select='format-number(Seminarkosten, "#.00")'/> €<br />
    Seminardauer: <xsl:choose>
    <xsl:when test="Kursdauer = '1' ">
    <xsl:value-of select="Kursdauer"/> Tag<br />
    </xsl:when>
    <xsl:otherwise>
    <xsl:value-of select="Kursdauer"/> Tage<br />
    </xsl:otherwise>
    </xsl:choose>
    <hr />
    </xsl:for-each>

    </xsl:template>

    </xsl:stylesheet>

    I tried for hours, but I could not make it work. First of all I don't know where to put the variable inside the GetDataSet-method (I alays get parsing error messages) and I don't know if my idea will ever work. Can someone help me and explain it to a stupid admin?

    Thanks in advance
    Peter

  • Steen Tøttrup 191 posts 291 karma points c-trib
    Aug 30, 2010 @ 08:18
    Steen Tøttrup
    0

    Hi Peter!

    First off, I would probably do this in an user control, and not in xslt, but I'm a developer, so..

    You would want to put the variable outside the xsl:choose tag, and then I'm guessing you want to use the where variable somewhere in the sql you fire off.

    I'm not familiar with the sql extension, so I'm just guessing here:


    <xsl:variable name="query">SELECT dbo.AkadSeminare.Titel, dbo.AkadSeminare.ThemenbereichGF, dbo.AkadTermine.Ort, dbo.AkadTermine.SeminarNr, dbo.AkadTermine.Datum, dbo.AkadTermine.Kursdauer, dbo.AkadTermine.Seminarkosten FROM dbo.AkadSeminare INNER JOIN dbo.AkadTermine ON dbo.AkadSeminare.ID = dbo.AkadTermine.SeminarID
    <xsl:choose>
    <xsl:when test="@nodeName = 'Offene Seminare'">
    </xsl:when>
    <xsl:when test="@nodeName = 'Anwendungs-IT'">
    WHERE dbo.AkadSeminare.ThemenbereichGF &lt; 7100
    </xsl:when>
    <xsl:when test="@nodeName = 'Microsoft Office Anwendungen'">
    WHERE dbo.AkadSeminare.ThemenbereichGF = 7001
    </xsl:when>
    <xsl:when test="@nodeName = 'Desktop Publishing Anwendungen'">
    WHERE dbo.AkadSeminare.ThemenbereichGF = 7002
    </xsl:when>
    </xsl:choose>
    </xsl:variable>

    <xsl:for-each select="sql:GetDataSet('Seminare', $query, 'seminar')//seminar">

    </xsl:for-each>

     

  • Chriztian Steinmeier 2800 posts 8791 karma points MVP 8x admin c-trib
    Aug 30, 2010 @ 09:19
    Chriztian Steinmeier
    0

    Hi Peter,

    A quick note - when generating non-XML output like this, be sure to set the output method to "text" (e.g., this makes sure not to output &lt; when you want a < )

    /Chriztian

  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies