Siebel Portal Framework Guide > Delivering Content to External Web Applications > Manipulating Siebel XML with XSL Stylesheets and XSLT >

Sample XSL Stylesheet


The following XSL style sheet code sample is used to transform the WML-based Siebel Wireless application into HTML through the XML Web Interface. This code shows how a list view in the Wireless application is converted to HTML.


<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html" media-type="text/html"/>

<!-- This style sheet process the XML output for both the Splash screens and standard views-->

<!-- ====================== Root Document Processing ========================-->

<!-- Document Root-->

<xsl:template match="/">

<xsl:apply-templates select="//APPLICATION/SCREEN/VIEW/APPLET"></xsl:apply-templates>

</xsl:template>

<!-- ============================ View Processing ===========================-->

<!-- List Base mode Template-->

<xsl:template match="APPLET">

<HTML>

<BODY>

<b>

<!-- Applet Title Label-->

<xsl:value-of select="CONTROL[@ID='1']"/>

<!-- for calendar title -->

<xsl:value-of select="CALENDAR/@TITLE"/>

</b>

<br></br>

<!-- XML No Record found and other alerts -->

<xsl:if test="string-length(ALERT)>0 and @CLASS='CSSFrameCalRerouteBase'">

<xsl:value-of select="ALERT"/>

<br></br>

</xsl:if>

<!-- Search and Title with data or other links -->

<xsl:apply-templates select="CONTROL[@ID=2 or @ID=3 or @ID=4 or @ID=5 or @ID=6 or @ID=7 or @ID=8 or @ID=9]"/>

<!-- Separator line -->

<xsl:apply-templates select="CONTROL[@ID=1000]"/>

<!-- Display fields for list of records here-->

<xsl:apply-templates select="LIST"></xsl:apply-templates>

<xsl:if test="string-length(@ROW_COUNTER)>0">

<xsl:value-of select="@ROW_COUNTER"></xsl:value-of>

<br></br>

</xsl:if>

<!-- control link for New, Main Menu, etc.. -->

<xsl:apply-templates select="CONTROL[@ID>=40 and @HTML_TYPE='Link']"/>

</BODY>

</HTML>

</xsl:template>

<!-- ================= Control and Link Processing ===================-->

<xsl:template match="CONTROL">

<xsl:choose>

<xsl:when test="@HTML_TYPE='Link'">

<xsl:call-template name="build_simple_link"></xsl:call-template>

</xsl:when>

<xsl:otherwise>

<xsl:value-of select="."></xsl:value-of><br></br>

</xsl:otherwise>

</xsl:choose>

</xsl:template>

<xsl:template name="build_simple_link">

<xsl:variable name="link">

<xsl:apply-templates select="ANCHOR"></xsl:apply-templates>

</xsl:variable>

<xsl:element name="A">

<xsl:attribute name="HREF"><xsl:value-of select="$link"/></xsl:attribute>

<xsl:value-of select="@CAPTION"/>

</xsl:element>

<br/>

</xsl:template>

<!-- ============================ List processing ==========================-->

<!-- LIST Template builds a list of records -->

<xsl:template match="LIST">

<!-- first get the URL from the RS_HEADER element-->

<xsl:variable name="link">

<xsl:apply-templates select="RS_HEADER/METHOD[@NAME='Drilldown']"/>

</xsl:variable>

<!-- capture the URL before the SWERowId parameter-->

<xsl:variable name="link-prefix">

<xsl:value-of select="substring-before($link,'R=')"/>

</xsl:variable>

<!-- capture the URL after the SWERowId parameter-->

<xsl:variable name="link-suffix">

<xsl:value-of select="substring-after($link,'R=')"/>

</xsl:variable>

<!-- capture the field with the drilldown enabled - use later to build drilldown -->

<xsl:variable name="drilldowncontrol">

<xsl:value-of select="RS_HEADER/METHOD[@NAME='Drilldown']/@FIELD"></xsl:value-of>

</xsl:variable>

<!-- loop through the rows in the RS_DATA element -->

<xsl:for-each select="RS_DATA/ROW">

<!-- pickup the Row Id for the Row so we can rebuild the SWERowId URL parameter-->

<xsl:variable name="rowid">

<xsl:value-of select="@ROWID"/>

</xsl:variable>

<!-- loop through each field and control in the Row -->

<xsl:for-each select="FIELD|CONTROL">

<xsl:choose>

<!-- if the field is the drilldown field then create a link on the display data-->

<xsl:when test="@NAME = $drilldowncontrol">

<xsl:element name="A">

<xsl:attribute name="HREF">

<xsl:value-of select="concat(normalize-space($link-prefix),'R=',$rowid,$link-suffix)"/>&amp;F=<xsl:value-of select="@VARIABLE"/>

</xsl:attribute>

<xsl:value-of select="."></xsl:value-of>

</xsl:element>

</xsl:when>

<!-- otherwise just display the data as is-->

<xsl:otherwise>

<xsl:value-of select="."></xsl:value-of>

</xsl:otherwise>

</xsl:choose>

<!-- need a break if field is not empty -->

<xsl:variable name="empty_field">

<xsl:value-of select="."/>

</xsl:variable>

<xsl:if test="string-length($empty_field)!=0"><br></br></xsl:if>

</xsl:for-each>

</xsl:for-each>

<!-- Show separator line only if has one or more record -->

<xsl:variable name="row_data">

<xsl:value-of select="normalize-space(RS_DATA/ROW)"/>

</xsl:variable>

<xsl:if test="string-length($row_data)>0">

<xsl:text>- - - -</xsl:text><br></br>

</xsl:if>

<!-- show More link only if there is next record set -->

<xsl:variable name="more_link">

<xsl:value-of select="normalize-space(RS_HEADER/METHOD[@NAME='GotoNextSet']/@CAPTION)"/>

</xsl:variable>

<xsl:if test="string-length($more_link)>0">

<xsl:element name="A">

<xsl:attribute name="HREF">

<xsl:apply-templates select="RS_HEADER/METHOD[@NAME='GotoNextSet']"/>

</xsl:attribute>

<xsl:value-of select="$more_link"></xsl:value-of>

</xsl:element>

<br></br>

</xsl:if>

</xsl:template>

<!-- =================== Anchor URL Processing =======================-->

<!-- ANCHOR Template builds the URL for drilldowns and links -->

<xsl:template match="ANCHOR">

<xsl:text>start.swe?</xsl:text>

<xsl:apply-templates select="CMD|INFO"/>

</xsl:template>

<xsl:template match="CMD">

<xsl:value-of select="@NAME"/>=<xsl:value-of select="@VALUE"/>

<xsl:apply-templates select="ARG"/>

</xsl:template>

<xsl:template match="ARG">

<xsl:variable name="arg">

<xsl:if test="string-length(normalize-space(.)) >0">

<xsl:variable name="argstring">

<xsl:choose>

<xsl:when test="@NAME='Pu' or @NE='R' or @NAME='Rs'">

<xsl:value-of select="translate(normalize-space(),'%2B','+')'"/>

</xsl:when>

<xsl:otherwise>

<xsl:value-of select="normalize-space()"/>

</xsl:otherwise>

</xsl:choose>

</xsl:variable>

<xsl:value-of select="$argstring"/>

</xsl:if>

</xsl:variable>

<xsl:text>&amp;</xsl:text>

<xsl:value-of select="@NAME"></xsl:value-of>=<xsl:value-of select="$arg"></xsl:value-of>

<!--<xsl:text>&#38;</xsl:text>-->

<!--<xsl:value-of select="@NAME"/>=<xsl:value-of select="translate($arg,'%2B','+')'"/>-->

</xsl:template>

<xsl:template match="INFO">

<xsl:variable name="info">

<xsl:if test="string-length(normalize-space(.)) >0">

<!--<xsl:value-of select="."/>-->

<xsl:value-of select="normalize-space(.)"/>

</xsl:if>

</xsl:variable>

<xsl:text>&amp;</xsl:text>

<xsl:value-of select="@NAME"/>=<xsl:value-of select="$info"/>

</xsl:template>

</xsl:stylesheet>

Siebel Portal Framework Guide Copyright © 2006, Oracle. All rights reserved.