URL Parameter in CCNET Stylesheets abrfagen

Schon des längeren setzen wir in meiner Firma CruiseControl.NET für automatisierte Builds, die Durchführung von Unit Tests, und seit kurzem auch für die Erstellung einer CodeCoverage Analyse ein. Gerade bei letzterem sind die auswertbaren Informationen enorm hoch und auf einer einzelnen HTML Seite nicht mehr übersichtlich darstellbar. Hinzu kommt, dass die von PartCover mitgelieferten XSLT Stylesheets weder zum aktuellen Release passen, noch besonders optisch ansprechend sind.

Also machte ich mich an die Optimierung des Stylesheets, mit dem Problem: “Wie kann ich Parameter an dass CCNET Stylesheet übergeben um beispielsweise nur eine gezielte Assembly anzuzeigen?”Die Lösung lag in der Verwendung von msxml Script. Diese kann im XSLT Stylesheet eingebungen werden und somit z.B. auf den Namespace “System.Web” zugegriffen werden, welcher eine Abfrage der Url GET Parameter ermöglicht.

Folgender Coderumpf deklariert z.B. die Methode GetAssembly() im XML Namespace “csharp” und liefert den übergebenen Wert “asmid” aus der Url.

<xsl:stylesheet
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
 xmlns:msxml="urn:schemas-microsoft-com:xslt"
 xmlns:csharp="http://csharp"
 exclude-result-prefixes="xsl msxml csharp">

 <msxml:script implements-prefix="csharp" language="C#">
 <msxml:using namespace="System.Collections"/>
 <msxml:assembly name="System.Web"/>
 <msxml:using namespace="System.Web"/>
 <![CDATA[

 public int GetAssembly()
 {
    int asmid = -1;
    if(HttpContext.Current.Request.QueryString["asmid"] != null)
    {
       if(HttpContext.Current.Request.QueryString["asmid"].Length > 0)
       {
          asmid = Int32.Parse(HttpContext.Current.Request.QueryString["asmid"]);
       }
    }
    return asmid;
 }

 ]]>
 </msxml:script>

In meinem Stylesheet kann ich nun auf den Wert aus der URL zugreifen, z.B. in einer if Bedingung:

<xsl:if test="@asmref = csharp:GetAssembly()">
...
</xsl:if>

Die URL sieht dann beispielsweise so aus:
PartCoverDetails.aspx?asmid=13
Dadurch gelang es, einen komfortablen DrillDown von Assembly über Klassen bis hin zu den Methoden zu implementieren, indem jeweils die Seite “PartCoverDetails.aspx” per Link aufgerufen wird und die entsprechenden Parameter übergeben werden.

Schlagworte: , , , , , , , ,

Kommentieren