123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- Licensed Materials - Property of IBM
- IBM Cognos Products: AGS
- (C) Copyright IBM Corp. 2005, 2017
- US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
- -->
- <xts:morphlet resolverBase="prompting" xmlns:xts="http://developer.cognos.com/schemas/xts/" messageBase="messages/portal.xml" requiredCapability="canUseEventStudio">
- <!--
- Example input :
- <items>
- <type>for_count</type>
- <item name="Quantity" displayType="Value">
- <dataItem name="Quantity" label="Quantity" aggregate="total">
- <expression>[gosales_goretailers].[Orders].[Quantity]</expression>
- </dataItem>
- </item>
- <item name="Order date" displayType="Value">
- <dataItem name="Order date" label="Order date" aggregate="none">
- <expression>[gosales_goretailers].[Orders].[Order date]</expression>
- </dataItem>
- </item>
- <item name="Order number" displayType="Value">
- <dataItem name="Order number" label="Order number" aggregate="none">
- <expression>[gosales_goretailers].[Orders].[Order number]</expression>
- </dataItem>
- </item>
- <item name="Order year" displayType="Value">
- <dataItem name="Order year" label="Order year" aggregate="none">
- <expression>[gosales_goretailers].[Orders].[Order year]</expression>
- </dataItem>
- </item>
- <item name="Order month" displayType="Value">
- <dataItem name="Order month" label="Order month" aggregate="none">
- <expression>[gosales_goretailers].[Orders].[Order month]</expression>
- </dataItem>
- <drill id="AgentTask-98C8696DDEFDF17C9BEED7E470BF6331" path="CAMID("ENT:u=S-1-5-21-284529841-4053721766-3450372860-1021")/folder[@name='My Folders']/report[@name='staff details']" name="staff details">
- <links>
- <link name="Parameter1" topic="GENDER"/>
- </links>
- </drill>
- </item>
- <group ref="Order month"/>
- <.../>
- <sort ref="Quantity" order="0"/>
- <.../>
- </items>
- -->
- <xts:block id="decodeItems" nodelist="env" processor="XSLT" type="exec" condition=".[/root/env/param[@name='queryItems']]">
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:xts="http://developer.cognos.com/schemas/xts/"
- xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
- version="1.0" exclude-result-prefixes="xts xtsext">
- <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
- <xsl:template match="/">
- <xts:sequence>
- <!-- decode the data items and meta data that wraps them -->
- <xts:append select="/root">
- <xts:transform name="XMLDecode">
- <xsl:value-of select="/root/env/param[@name='queryItems']"/>
- </xts:transform>
- </xts:append>
- <xts:append select="root/env">
- <!-- place the actual data items in a parameter, these will be inserted in the selection element as-is-->
- <param name="dataItems">
- <xts:transform name="XMLEncode">
- <xts:queryNode select="/root/items//dataItem"/>
- </xts:transform>
- </param>
- </xts:append>
- </xts:sequence>
- </xsl:template>
- </xsl:stylesheet>
- </xts:block>
-
- <!--
- ===============================================================================================
- build the report specification
- ===============================================================================================
- -->
- <xts:block id="buildSpecification" processor="XSLT" type="exec" nodelist="env,items" dependency="decodeItems">
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:xts="http://developer.cognos.com/schemas/xts/" xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt" xmlns:xos="http://developer.cognos.com/schemas/xts/output/" exclude-result-prefixes="xsl xts xtsext xos">
- <xsl:output method="xml" version="1.0" encoding="UTF-8"/>
- <xsl:template match="/">
- <xts:sequence>
- <xts:append select="/root">
- <specification>
- <xsl:variable name="el"><xsl:value-of select="/root/env/param[@name='el']"/></xsl:variable>
- <xsl:text><report expressionLocale="</xsl:text>
- <xsl:value-of select="$el"/>
- <xsl:text>" xmlns="http://developer.cognos.com/schemas/report/14.0/"></xsl:text>
- <xsl:text><!--RS:14.0--></xsl:text>
- <xsl:text><modelPath></xsl:text>
- <xsl:value-of select="xtsext:xmlencode(string(/root/env/param[@name='model']))"/>
- <xsl:text></modelPath></xsl:text>
- <xsl:text><queries></xsl:text>
- <xsl:text><query name="Query1"></xsl:text>
- <xsl:text><source><model/></source></xsl:text>
- <xsl:text><selection></xsl:text>
- <xsl:value-of select="/root/env/param[@name='dataItems']"/>
- <xsl:text></selection></xsl:text>
- <xts:transform name="XMLEncode">
- <xts:queryNode select="/root/items/detailFilters"/>
- <xts:queryNode select="/root/items/summaryFilters"/>
- </xts:transform>
- <xsl:text><queryHints><localCache value="false"/></queryHints></xsl:text>
- <xsl:text></query></xsl:text>
- <xsl:call-template name="extraQueries"/>
- <xsl:text></queries></xsl:text>
- <xsl:text><layouts></xsl:text>
- <xsl:text><layout></xsl:text>
- <xsl:text><reportPages></xsl:text>
- <xsl:text><page name="Page1" ></xsl:text>
- <xsl:text><style><defaultStyles><defaultStyle refStyle="pg"/></defaultStyles></style></xsl:text>
- <xsl:text><pageBody ></xsl:text>
- <xsl:text><style><defaultStyles><defaultStyle refStyle="pb"/></defaultStyles></style></xsl:text>
- <xsl:text><contents></xsl:text>
- <xsl:text><list refQuery="Query1"></xsl:text>
- <xsl:text><style><defaultStyles><defaultStyle refStyle="ls"/></defaultStyles></style></xsl:text>
- <xsl:call-template name="buildColumns"/>
- <xsl:call-template name="buildGroups"/>
- <xsl:text></list></xsl:text>
- <xsl:text></contents></xsl:text>
- <xsl:text></pageBody></xsl:text>
- <xsl:text></page></xsl:text>
- <xsl:call-template name="extraReportPages"/>
- <xsl:text></reportPages></xsl:text>
- <xsl:call-template name="promptPages"/>
- <xsl:text></layout></xsl:text>
- <xsl:text></layouts></xsl:text>
- <xsl:if test="count(./drill)>0">
- <xsl:text><drillBehavior drillUpDown="true" modelBasedDrillThru="true"/></xsl:text>
- </xsl:if>
- <xsl:call-template name="reportVariables"/>
- <xsl:text><classStyles></xsl:text>
- <xsl:text><classStyle name="hideItem" ></xsl:text>
- <xsl:text><CSS value="display:none" /></xsl:text>
- <xsl:text></classStyle></xsl:text>
- <xsl:text></classStyles></xsl:text>
- <xsl:text></report></xsl:text>
- </specification>
- </xts:append>
- </xts:sequence>
- </xsl:template>
-
- <!--
- build the extra report pages
- -->
- <xsl:template name="extraReportPages">
- <xsl:if test="count(/root/items/item) > 0">
- </xsl:if>
- </xsl:template>
- <!--
- build the extra queries
- -->
- <xsl:template name="extraQueries">
- <xsl:value-of select="string(/root/env/param[@name='extraQueries'])"/>
- </xsl:template>
- <!--
- build the report variables
- -->
- <xsl:template name="reportVariables">
- <xsl:if test="count(/root/items/item) > 0">
- </xsl:if>
- </xsl:template>
- <!--
- build the prompt pages
- -->
- <xsl:template name="promptPages">
- <!-- <xsl:if test="count(/root/env/param[@name='promptPages']) > 0">
- <xsl:value-of select="xtsext:xmlencode(string(/root/env/param[@name='promptPages']))"/>
- </xsl:if> -->
- <xsl:value-of select="string(/root/env/param[@name='promptPages'])"/>
- </xsl:template>
-
- <!--
- build the list column elements
- -->
- <xsl:template name="buildColumns">
- <xsl:if test="count(/root/items/item) > 0">
- <xsl:text><listColumns></xsl:text>
- <xsl:for-each select="/root/items/item">
- <xsl:call-template name="buildListColumn"/>
- </xsl:for-each>
- <xsl:text></listColumns></xsl:text>
- </xsl:if>
- </xsl:template>
-
- <xsl:template name="buildListColumn">
- <xsl:variable name="type">
- <xsl:choose>
- <xsl:when test="contains(@displayType,'Value')"><xsl:text>textItem</xsl:text></xsl:when>
- <xsl:when test="contains(@displayType,'Picture')"><xsl:text>image</xsl:text></xsl:when>
- <xsl:when test="contains(@displayType,'Link')"><xsl:text>hyperlink</xsl:text></xsl:when>
- <xsl:otherwise><xsl:text>textItem</xsl:text></xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:text><listColumn></xsl:text>
- <xsl:choose>
- <xsl:when test="/root/items/type='for_count'">
- <xsl:text><listColumnTitle ></xsl:text>
- <xsl:text><style><defaultStyles><defaultStyle refStyle="hideItem"/></defaultStyles></style></xsl:text>
- <xsl:text><contents></xsl:text>
- <xsl:text><textItem></xsl:text>
- <xsl:text><dataSource></xsl:text>
- <xsl:text><dataItemLabel refDataItem="</xsl:text>
- <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
- <xsl:text>"/></xsl:text>
- <xsl:text></dataSource></xsl:text>
- <xsl:text></textItem></xsl:text>
- <xsl:text></contents></xsl:text>
- <xsl:text></listColumnTitle></xsl:text>
- <xsl:text><listColumnBody ></xsl:text>
- <xsl:text><style><defaultStyles><defaultStyle refStyle="hideItem"/></defaultStyles></style></xsl:text>
- <xsl:text><contents></xsl:text>
- <xsl:text><textItem></xsl:text>
- <xsl:text><dataSource></xsl:text>
- <xsl:text><dataItemValue refDataItem="</xsl:text>
- <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
- <xsl:text>"/></xsl:text>
- <xsl:text></dataSource></xsl:text>
- <xsl:text></textItem></xsl:text>
- <xsl:text></contents></xsl:text>
- <xsl:text></listColumnBody></xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text><listColumnTitle ></xsl:text>
- <xsl:text><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style></xsl:text>
- <xsl:text><contents></xsl:text>
- <xsl:text><textItem></xsl:text>
- <xsl:text><dataSource></xsl:text>
- <xsl:text><dataItemLabel refDataItem="</xsl:text>
- <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
- <xsl:text>"/></xsl:text>
- <xsl:text></dataSource></xsl:text>
- <xsl:text></textItem></xsl:text>
- <xsl:text></contents></xsl:text>
- <xsl:text></listColumnTitle></xsl:text>
- <xsl:text><listColumnBody ></xsl:text>
- <xsl:text><style><defaultStyles><defaultStyle refStyle="lc"/></defaultStyles></style></xsl:text>
- <xsl:text><contents></xsl:text>
- <xsl:choose>
- <xsl:when test="contains(@displayType,'Link')">
- <xsl:text><</xsl:text>
- <xsl:value-of select="$type"/>
- <xsl:text>></xsl:text>
- <xsl:text><dataSource></xsl:text>
- <xsl:text><dataItemValue refDataItem="</xsl:text>
- <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
- <xsl:text>"/></xsl:text>
- <xsl:text></dataSource></xsl:text>
- <xsl:text><contents></xsl:text>
- <xsl:text><textItem></xsl:text>
- <xsl:text><dataSource></xsl:text>
- <xsl:text><dataItemValue refDataItem="</xsl:text>
- <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
- <xsl:text>"/></xsl:text>
- <xsl:text></dataSource></xsl:text>
- <xsl:text></textItem></xsl:text>
- <xsl:text></contents></xsl:text>
- <xsl:text></</xsl:text>
- <xsl:value-of select="$type"/>
- <xsl:text>></xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text><</xsl:text>
- <xsl:value-of select="$type"/>
- <xsl:text>></xsl:text>
- <xsl:text><dataSource></xsl:text>
- <xsl:text><dataItemValue refDataItem="</xsl:text>
- <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
- <xsl:text>"/></xsl:text>
- <xsl:text></dataSource></xsl:text>
- <xsl:call-template name="createDrills"/>
- <xsl:text></</xsl:text>
- <xsl:value-of select="$type"/>
- <xsl:text>></xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text></contents></xsl:text>
- <xsl:if test="@groupBy='true'">
- <xsl:text><listColumnRowSpan refDataItem="</xsl:text>
- <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
- <xsl:text>"/></xsl:text>
- </xsl:if>
- <xsl:text></listColumnBody></xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text></listColumn></xsl:text>
- </xsl:template>
- <xsl:template name="buildGroups">
- <xsl:choose>
- <xsl:when test="/root/items/type='for_count'">
- <xsl:text><listOverallGroup></xsl:text>
- <xsl:text><listFooter></xsl:text>
- <xsl:text><listRows></xsl:text>
- <xsl:text><listRow></xsl:text>
- <xsl:text><rowCells></xsl:text>
- <xsl:text><rowCell colSpan="1" ></xsl:text>
- <xsl:text><style><defaultStyles><defaultStyle refStyle="of"/></defaultStyles></style></xsl:text>
- <xsl:text><contents></xsl:text>
- <xsl:text><textItem></xsl:text>
- <xsl:text><dataSource></xsl:text>
- <xsl:text><staticValue></xsl:text>Count<xsl:text></staticValue></xsl:text>
- <xsl:text></dataSource></xsl:text>
- <xsl:text></textItem></xsl:text>
- <xsl:text></contents></xsl:text>
- <xsl:text></rowCell></xsl:text>
- <xsl:text><rowCell ></xsl:text>
- <xsl:text><style><defaultStyles><defaultStyle refStyle="os"/></defaultStyles></style></xsl:text>
- <xsl:text><contents></xsl:text>
- <xsl:text><textItem></xsl:text>
- <xsl:text><dataSource></xsl:text>
- <xsl:text><dataItemValue refDataItem="_const"/></xsl:text>
- <xsl:text></dataSource></xsl:text>
- <xsl:text></textItem></xsl:text>
- <xsl:text></contents></xsl:text>
- <xsl:text></rowCell></xsl:text>
- <xsl:text></rowCells></xsl:text>
- <xsl:text></listRow></xsl:text>
- <xsl:text></listRows></xsl:text>
- <xsl:text></listFooter></xsl:text>
- <xsl:text></listOverallGroup></xsl:text>
- </xsl:when>
- <xsl:when test="count(/root/items/group) > 0">
- <xsl:text><listGroups></xsl:text>
- <xsl:for-each select="/root/items/group">
- <xsl:if test="@ref">
- <xsl:text><listGroup refDataItem="</xsl:text>
- <xsl:value-of select="@ref"/>
- <xsl:text>"/></xsl:text>
- </xsl:if>
- </xsl:for-each>
- <xsl:text></listGroups></xsl:text>
- </xsl:when>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template name="buildStyle">
- <!-- do not apply styles for count report specification-->
- <xsl:if test="not(/root/items/type='for_count')">
- <xsl:text><style></xsl:text>
- <xsl:text><CSS value="border-collapse:collapse"/></xsl:text>
- <xsl:text></style></xsl:text>
- </xsl:if>
- </xsl:template>
-
- <xsl:template name="buildSorts">
- <xsl:if test="count(/root/items/sort) > 0">
- <xsl:text><sortList></xsl:text>
- <xsl:for-each select="/root/items/sort">
- <xsl:call-template name="buildSortItem"/>
- </xsl:for-each>
- <xsl:text></sortList></xsl:text>
- </xsl:if>
- </xsl:template>
- <!-- build the <sortItem/> element -->
- <xsl:template name="buildSortItem">
- <xsl:if test="@order">
- <xsl:text><sortItem refDataItem="</xsl:text>
- <xsl:value-of select="@ref"/>
- <xsl:text>"></xsl:text>
- <xsl:attribute name="sortOrder">
- <xsl:if test="@order > 0"><xsl:text>ascending</xsl:text></xsl:if>
- <xsl:if test="@order > 0"><xsl:text>descending</xsl:text></xsl:if>
- </xsl:attribute>
- <xsl:text></sortItem></xsl:text>
- </xsl:if>
- </xsl:template>
- <!-- create the report drill throughs using the input metadata :
- <drill id="id" path="path" name="name">
- <links>
- <link name="name" topic="topic"/>
- </links>
- ...
- </drill>
- ...
- -->
- <xsl:template name="createDrills">
- <xsl:if test="count(./drill)>0">
- <xsl:variable name="d" select="./drill"/>
- <xsl:text><reportDrills></xsl:text>
- <xsl:text><reportDrill name="</xsl:text>
- <xsl:value-of select="$d/@id"/>
- <xsl:text>"></xsl:text>
- <xsl:text><drillLabel></xsl:text>
- <xsl:text><dataSource></xsl:text>
- <xsl:text><staticValue/></xsl:text>
- <xsl:text></dataSource></xsl:text>
- <xsl:text></drillLabel></xsl:text>
- <xsl:text><drillTarget></xsl:text>
- <xsl:text><reportPath path="</xsl:text>
- <xsl:value-of select="xtsext:xmlencode(string($d/@path))"/>
- <xsl:text>"></xsl:text>
- <xsl:text><XMLAttributes></xsl:text>
- <xsl:text><XMLAttribute name="ReportName" value="</xsl:text>
- <xsl:value-of select="xtsext:xmlencode(string($d/@name))"/>
- <xsl:text>"/></xsl:text>
- <xsl:text><XMLAttribute name="class" value="report"/></xsl:text>
- <xsl:text></XMLAttributes></xsl:text>
- <xsl:text></reportPath></xsl:text>
- <xsl:text><drillLinks></xsl:text>
- <xsl:for-each select="$d/links/link">
- <xsl:text><drillLink></xsl:text>
- <xsl:text><drillTargetContext></xsl:text>
- <xsl:text><parameterContext parameter="</xsl:text>
- <xsl:value-of select="xtsext:xmlencode(string(./@name))"/>
- <xsl:text>"/></xsl:text>
- <xsl:text></drillTargetContext></xsl:text>
- <xsl:text><drillSourceContext></xsl:text>
- <xsl:text><dataItemContext refDataItem="</xsl:text>
- <xsl:value-of select="xtsext:xmlencode(string(./@topic))"/>
- <xsl:text>"/></xsl:text>
- <xsl:text></drillSourceContext></xsl:text>
- <xsl:text></drillLink></xsl:text>
- </xsl:for-each>
- <xsl:text></drillLinks></xsl:text>
- <xsl:text></drillTarget></xsl:text>
- <xsl:text></reportDrill></xsl:text>
- <xsl:text></reportDrills></xsl:text>
- </xsl:if>
- </xsl:template>
- </xsl:stylesheet>
- </xts:block>
- <!--
- ===============================================================================================
- genMarkup - Produce the much needed XML response
- ===============================================================================================
- -->
- <!-- call the getExternalRequest to see if the request came from the /ext entry point -->
- <xts:block id="getExternalRequest" dependency="buildSpecification" processor="XSLT" type="exec">
- <xts:logicsheet path="logicsheets/portal.xsl"/>
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt" xmlns:pf="http://developer.cognos.com/schemas/xts/pf" exclude-result-prefixes="pf">
- <pf:variables/>
- <xsl:template match="/">
- <xts:sequence>
- <xts:append>
- <externalRequest>
- <xts:function name="getRequestExternal" xmlns:xts="http://developer.cognos.com/schemas/xts/">
- <xts:param name="passport">
- <xsl:value-of select="$passport"/>
- </xts:param>
- <xts:param name="secureState">
- <xsl:value-of select="/root/header/*[local-name()='biBusHeader']/*[local-name()='CAF']/*[local-name()='secureState']"/>
- </xts:param>
- </xts:function>
- </externalRequest>
- </xts:append>
- </xts:sequence>
- </xsl:template>
- </xsl:stylesheet>
- </xts:block>
-
- <!-- depending on the output of the getExternalRequest request - sign the request -->
- <xts:block id="signSpecification" dependency="getExternalRequest" processor="XSLT" type="exec" nodelist="getRequestExternalResponse,specification">
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt">
- <xsl:template match="/">
- <xts:sequence>
- <xts:append>
- <signedSpec>
- <xsl:choose>
- <xsl:when test="/root/getRequestExternalResponse">
- <xts:function name="signReportSpec" xmlns:xts="http://developer.cognos.com/schemas/xts/">
- <xts:param name="source">
- <xsl:copy-of select="/root/specification"/>
- </xts:param>
- </xts:function>
- </xsl:when>
- <xsl:otherwise>
- <xsl:copy-of select="/root/specification"/>
- </xsl:otherwise>
- </xsl:choose>
- </signedSpec>
- </xts:append>
- </xts:sequence>
- </xsl:template>
- </xsl:stylesheet>
- </xts:block>
- <!-- build the output we want with the signed request -->
- <xts:block id="makeRequest" dependency="signSpecification" mode="output" mimeType="application/xml; charset=utf-8" processor="XSLT" type="exec" nodelist="signedSpec">
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt" version="1.0">
- <xsl:output method="xml" version="1.0" encoding="UTF-8"/>
- <!-- build the metadata request -->
- <xsl:template match="/">
- <xsl:call-template name="buildSpec"/>
- </xsl:template>
- <xsl:template name="buildSpec">
- <bus:value xsi:type="bus:specification" xmlns:bus="http://developer.cognos.com/schemas/bibus/3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <xsl:value-of select="/root/signedSpec"/>
- </bus:value>
- </xsl:template>
- </xsl:stylesheet>
- </xts:block>
- </xts:morphlet>
|