buildReportSpec.xts 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. Licensed Materials - Property of IBM
  4. IBM Cognos Products: AGS
  5. (C) Copyright IBM Corp. 2005, 2017
  6. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. -->
  8. <xts:morphlet resolverBase="prompting" xmlns:xts="http://developer.cognos.com/schemas/xts/" messageBase="messages/portal.xml" requiredCapability="canUseEventStudio">
  9. <!--
  10. Example input :
  11. <items>
  12. <type>for_count</type>
  13. <item name="Quantity" displayType="Value">
  14. <dataItem name="Quantity" label="Quantity" aggregate="total">
  15. <expression>[gosales_goretailers].[Orders].[Quantity]</expression>
  16. </dataItem>
  17. </item>
  18. <item name="Order date" displayType="Value">
  19. <dataItem name="Order date" label="Order date" aggregate="none">
  20. <expression>[gosales_goretailers].[Orders].[Order date]</expression>
  21. </dataItem>
  22. </item>
  23. <item name="Order number" displayType="Value">
  24. <dataItem name="Order number" label="Order number" aggregate="none">
  25. <expression>[gosales_goretailers].[Orders].[Order number]</expression>
  26. </dataItem>
  27. </item>
  28. <item name="Order year" displayType="Value">
  29. <dataItem name="Order year" label="Order year" aggregate="none">
  30. <expression>[gosales_goretailers].[Orders].[Order year]</expression>
  31. </dataItem>
  32. </item>
  33. <item name="Order month" displayType="Value">
  34. <dataItem name="Order month" label="Order month" aggregate="none">
  35. <expression>[gosales_goretailers].[Orders].[Order month]</expression>
  36. </dataItem>
  37. <drill id="AgentTask-98C8696DDEFDF17C9BEED7E470BF6331" path="CAMID(&quot;ENT:u=S-1-5-21-284529841-4053721766-3450372860-1021&quot;)/folder[@name=&apos;My Folders&apos;]/report[@name=&apos;staff details&apos;]" name="staff details">
  38. <links>
  39. <link name="Parameter1" topic="GENDER"/>
  40. </links>
  41. </drill>
  42. </item>
  43. <group ref="Order month"/>
  44. <.../>
  45. <sort ref="Quantity" order="0"/>
  46. <.../>
  47. </items>
  48. -->
  49. <xts:block id="decodeItems" nodelist="env" processor="XSLT" type="exec" condition=".[/root/env/param[@name='queryItems']]">
  50. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  51. xmlns:xts="http://developer.cognos.com/schemas/xts/"
  52. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  53. version="1.0" exclude-result-prefixes="xts xtsext">
  54. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  55. <xsl:template match="/">
  56. <xts:sequence>
  57. <!-- decode the data items and meta data that wraps them -->
  58. <xts:append select="/root">
  59. <xts:transform name="XMLDecode">
  60. <xsl:value-of select="/root/env/param[@name='queryItems']"/>
  61. </xts:transform>
  62. </xts:append>
  63. <xts:append select="root/env">
  64. <!-- place the actual data items in a parameter, these will be inserted in the selection element as-is-->
  65. <param name="dataItems">
  66. <xts:transform name="XMLEncode">
  67. <xts:queryNode select="/root/items//dataItem"/>
  68. </xts:transform>
  69. </param>
  70. </xts:append>
  71. </xts:sequence>
  72. </xsl:template>
  73. </xsl:stylesheet>
  74. </xts:block>
  75. <!--
  76. ===============================================================================================
  77. build the report specification
  78. ===============================================================================================
  79. -->
  80. <xts:block id="buildSpecification" processor="XSLT" type="exec" nodelist="env,items" dependency="decodeItems">
  81. <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">
  82. <xsl:output method="xml" version="1.0" encoding="UTF-8"/>
  83. <xsl:template match="/">
  84. <xts:sequence>
  85. <xts:append select="/root">
  86. <specification>
  87. <xsl:variable name="el"><xsl:value-of select="/root/env/param[@name='el']"/></xsl:variable>
  88. <xsl:text>&lt;report expressionLocale=&quot;</xsl:text>
  89. <xsl:value-of select="$el"/>
  90. <xsl:text>&quot; xmlns=&quot;http://developer.cognos.com/schemas/report/14.0/&quot;&gt;</xsl:text>
  91. <xsl:text>&lt;!--RS:14.0--&gt;</xsl:text>
  92. <xsl:text>&lt;modelPath&gt;</xsl:text>
  93. <xsl:value-of select="xtsext:xmlencode(string(/root/env/param[@name='model']))"/>
  94. <xsl:text>&lt;/modelPath&gt;</xsl:text>
  95. <xsl:text>&lt;queries&gt;</xsl:text>
  96. <xsl:text>&lt;query name=&quot;Query1&quot;&gt;</xsl:text>
  97. <xsl:text>&lt;source&gt;&lt;model/&gt;&lt;/source&gt;</xsl:text>
  98. <xsl:text>&lt;selection&gt;</xsl:text>
  99. <xsl:value-of select="/root/env/param[@name='dataItems']"/>
  100. <xsl:text>&lt;/selection&gt;</xsl:text>
  101. <xts:transform name="XMLEncode">
  102. <xts:queryNode select="/root/items/detailFilters"/>
  103. <xts:queryNode select="/root/items/summaryFilters"/>
  104. </xts:transform>
  105. <xsl:text>&lt;queryHints&gt;&lt;localCache value=&quot;false&quot;/&gt;&lt;/queryHints&gt;</xsl:text>
  106. <xsl:text>&lt;/query&gt;</xsl:text>
  107. <xsl:call-template name="extraQueries"/>
  108. <xsl:text>&lt;/queries&gt;</xsl:text>
  109. <xsl:text>&lt;layouts&gt;</xsl:text>
  110. <xsl:text>&lt;layout&gt;</xsl:text>
  111. <xsl:text>&lt;reportPages&gt;</xsl:text>
  112. <xsl:text>&lt;page name=&quot;Page1&quot; &gt;</xsl:text>
  113. <xsl:text>&lt;style&gt;&lt;defaultStyles&gt;&lt;defaultStyle refStyle="pg"/&gt;&lt;/defaultStyles&gt;&lt;/style&gt;</xsl:text>
  114. <xsl:text>&lt;pageBody &gt;</xsl:text>
  115. <xsl:text>&lt;style&gt;&lt;defaultStyles&gt;&lt;defaultStyle refStyle="pb"/&gt;&lt;/defaultStyles&gt;&lt;/style&gt;</xsl:text>
  116. <xsl:text>&lt;contents&gt;</xsl:text>
  117. <xsl:text>&lt;list refQuery=&quot;Query1&quot;&gt;</xsl:text>
  118. <xsl:text>&lt;style&gt;&lt;defaultStyles&gt;&lt;defaultStyle refStyle="ls"/&gt;&lt;/defaultStyles&gt;&lt;/style&gt;</xsl:text>
  119. <xsl:call-template name="buildColumns"/>
  120. <xsl:call-template name="buildGroups"/>
  121. <xsl:text>&lt;/list&gt;</xsl:text>
  122. <xsl:text>&lt;/contents&gt;</xsl:text>
  123. <xsl:text>&lt;/pageBody&gt;</xsl:text>
  124. <xsl:text>&lt;/page&gt;</xsl:text>
  125. <xsl:call-template name="extraReportPages"/>
  126. <xsl:text>&lt;/reportPages&gt;</xsl:text>
  127. <xsl:call-template name="promptPages"/>
  128. <xsl:text>&lt;/layout&gt;</xsl:text>
  129. <xsl:text>&lt;/layouts&gt;</xsl:text>
  130. <xsl:if test="count(./drill)>0">
  131. <xsl:text>&lt;drillBehavior drillUpDown=&quot;true&quot; modelBasedDrillThru=&quot;true&quot;/&gt;</xsl:text>
  132. </xsl:if>
  133. <xsl:call-template name="reportVariables"/>
  134. <xsl:text>&lt;classStyles&gt;</xsl:text>
  135. <xsl:text>&lt;classStyle name=&quot;hideItem&quot; &gt;</xsl:text>
  136. <xsl:text>&lt;CSS value=&quot;display:none&quot; /&gt;</xsl:text>
  137. <xsl:text>&lt;/classStyle&gt;</xsl:text>
  138. <xsl:text>&lt;/classStyles&gt;</xsl:text>
  139. <xsl:text>&lt;/report&gt;</xsl:text>
  140. </specification>
  141. </xts:append>
  142. </xts:sequence>
  143. </xsl:template>
  144. <!--
  145. build the extra report pages
  146. -->
  147. <xsl:template name="extraReportPages">
  148. <xsl:if test="count(/root/items/item) > 0">
  149. </xsl:if>
  150. </xsl:template>
  151. <!--
  152. build the extra queries
  153. -->
  154. <xsl:template name="extraQueries">
  155. <xsl:value-of select="string(/root/env/param[@name='extraQueries'])"/>
  156. </xsl:template>
  157. <!--
  158. build the report variables
  159. -->
  160. <xsl:template name="reportVariables">
  161. <xsl:if test="count(/root/items/item) > 0">
  162. </xsl:if>
  163. </xsl:template>
  164. <!--
  165. build the prompt pages
  166. -->
  167. <xsl:template name="promptPages">
  168. <!-- <xsl:if test="count(/root/env/param[@name='promptPages']) > 0">
  169. <xsl:value-of select="xtsext:xmlencode(string(/root/env/param[@name='promptPages']))"/>
  170. </xsl:if> -->
  171. <xsl:value-of select="string(/root/env/param[@name='promptPages'])"/>
  172. </xsl:template>
  173. <!--
  174. build the list column elements
  175. -->
  176. <xsl:template name="buildColumns">
  177. <xsl:if test="count(/root/items/item) > 0">
  178. <xsl:text>&lt;listColumns&gt;</xsl:text>
  179. <xsl:for-each select="/root/items/item">
  180. <xsl:call-template name="buildListColumn"/>
  181. </xsl:for-each>
  182. <xsl:text>&lt;/listColumns&gt;</xsl:text>
  183. </xsl:if>
  184. </xsl:template>
  185. <xsl:template name="buildListColumn">
  186. <xsl:variable name="type">
  187. <xsl:choose>
  188. <xsl:when test="contains(@displayType,'Value')"><xsl:text>textItem</xsl:text></xsl:when>
  189. <xsl:when test="contains(@displayType,'Picture')"><xsl:text>image</xsl:text></xsl:when>
  190. <xsl:when test="contains(@displayType,'Link')"><xsl:text>hyperlink</xsl:text></xsl:when>
  191. <xsl:otherwise><xsl:text>textItem</xsl:text></xsl:otherwise>
  192. </xsl:choose>
  193. </xsl:variable>
  194. <xsl:text>&lt;listColumn&gt;</xsl:text>
  195. <xsl:choose>
  196. <xsl:when test="/root/items/type='for_count'">
  197. <xsl:text>&lt;listColumnTitle &gt;</xsl:text>
  198. <xsl:text>&lt;style&gt;&lt;defaultStyles&gt;&lt;defaultStyle refStyle="hideItem"/&gt;&lt;/defaultStyles&gt;&lt;/style&gt;</xsl:text>
  199. <xsl:text>&lt;contents&gt;</xsl:text>
  200. <xsl:text>&lt;textItem&gt;</xsl:text>
  201. <xsl:text>&lt;dataSource&gt;</xsl:text>
  202. <xsl:text>&lt;dataItemLabel refDataItem=&quot;</xsl:text>
  203. <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
  204. <xsl:text>&quot;/&gt;</xsl:text>
  205. <xsl:text>&lt;/dataSource&gt;</xsl:text>
  206. <xsl:text>&lt;/textItem&gt;</xsl:text>
  207. <xsl:text>&lt;/contents&gt;</xsl:text>
  208. <xsl:text>&lt;/listColumnTitle&gt;</xsl:text>
  209. <xsl:text>&lt;listColumnBody &gt;</xsl:text>
  210. <xsl:text>&lt;style&gt;&lt;defaultStyles&gt;&lt;defaultStyle refStyle="hideItem"/&gt;&lt;/defaultStyles&gt;&lt;/style&gt;</xsl:text>
  211. <xsl:text>&lt;contents&gt;</xsl:text>
  212. <xsl:text>&lt;textItem&gt;</xsl:text>
  213. <xsl:text>&lt;dataSource&gt;</xsl:text>
  214. <xsl:text>&lt;dataItemValue refDataItem=&quot;</xsl:text>
  215. <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
  216. <xsl:text>&quot;/&gt;</xsl:text>
  217. <xsl:text>&lt;/dataSource&gt;</xsl:text>
  218. <xsl:text>&lt;/textItem&gt;</xsl:text>
  219. <xsl:text>&lt;/contents&gt;</xsl:text>
  220. <xsl:text>&lt;/listColumnBody&gt;</xsl:text>
  221. </xsl:when>
  222. <xsl:otherwise>
  223. <xsl:text>&lt;listColumnTitle &gt;</xsl:text>
  224. <xsl:text>&lt;style&gt;&lt;defaultStyles&gt;&lt;defaultStyle refStyle="lt"/&gt;&lt;/defaultStyles&gt;&lt;/style&gt;</xsl:text>
  225. <xsl:text>&lt;contents&gt;</xsl:text>
  226. <xsl:text>&lt;textItem&gt;</xsl:text>
  227. <xsl:text>&lt;dataSource&gt;</xsl:text>
  228. <xsl:text>&lt;dataItemLabel refDataItem=&quot;</xsl:text>
  229. <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
  230. <xsl:text>&quot;/&gt;</xsl:text>
  231. <xsl:text>&lt;/dataSource&gt;</xsl:text>
  232. <xsl:text>&lt;/textItem&gt;</xsl:text>
  233. <xsl:text>&lt;/contents&gt;</xsl:text>
  234. <xsl:text>&lt;/listColumnTitle&gt;</xsl:text>
  235. <xsl:text>&lt;listColumnBody &gt;</xsl:text>
  236. <xsl:text>&lt;style&gt;&lt;defaultStyles&gt;&lt;defaultStyle refStyle="lc"/&gt;&lt;/defaultStyles&gt;&lt;/style&gt;</xsl:text>
  237. <xsl:text>&lt;contents&gt;</xsl:text>
  238. <xsl:choose>
  239. <xsl:when test="contains(@displayType,'Link')">
  240. <xsl:text>&lt;</xsl:text>
  241. <xsl:value-of select="$type"/>
  242. <xsl:text>&gt;</xsl:text>
  243. <xsl:text>&lt;dataSource&gt;</xsl:text>
  244. <xsl:text>&lt;dataItemValue refDataItem=&quot;</xsl:text>
  245. <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
  246. <xsl:text>&quot;/&gt;</xsl:text>
  247. <xsl:text>&lt;/dataSource&gt;</xsl:text>
  248. <xsl:text>&lt;contents&gt;</xsl:text>
  249. <xsl:text>&lt;textItem&gt;</xsl:text>
  250. <xsl:text>&lt;dataSource&gt;</xsl:text>
  251. <xsl:text>&lt;dataItemValue refDataItem=&quot;</xsl:text>
  252. <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
  253. <xsl:text>&quot;/&gt;</xsl:text>
  254. <xsl:text>&lt;/dataSource&gt;</xsl:text>
  255. <xsl:text>&lt;/textItem&gt;</xsl:text>
  256. <xsl:text>&lt;/contents&gt;</xsl:text>
  257. <xsl:text>&lt;/</xsl:text>
  258. <xsl:value-of select="$type"/>
  259. <xsl:text>&gt;</xsl:text>
  260. </xsl:when>
  261. <xsl:otherwise>
  262. <xsl:text>&lt;</xsl:text>
  263. <xsl:value-of select="$type"/>
  264. <xsl:text>&gt;</xsl:text>
  265. <xsl:text>&lt;dataSource&gt;</xsl:text>
  266. <xsl:text>&lt;dataItemValue refDataItem=&quot;</xsl:text>
  267. <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
  268. <xsl:text>&quot;/&gt;</xsl:text>
  269. <xsl:text>&lt;/dataSource&gt;</xsl:text>
  270. <xsl:call-template name="createDrills"/>
  271. <xsl:text>&lt;/</xsl:text>
  272. <xsl:value-of select="$type"/>
  273. <xsl:text>&gt;</xsl:text>
  274. </xsl:otherwise>
  275. </xsl:choose>
  276. <xsl:text>&lt;/contents&gt;</xsl:text>
  277. <xsl:if test="@groupBy='true'">
  278. <xsl:text>&lt;listColumnRowSpan refDataItem=&quot;</xsl:text>
  279. <xsl:value-of select="xtsext:xmlencode(string(@name))"/>
  280. <xsl:text>&quot;/&gt;</xsl:text>
  281. </xsl:if>
  282. <xsl:text>&lt;/listColumnBody&gt;</xsl:text>
  283. </xsl:otherwise>
  284. </xsl:choose>
  285. <xsl:text>&lt;/listColumn&gt;</xsl:text>
  286. </xsl:template>
  287. <xsl:template name="buildGroups">
  288. <xsl:choose>
  289. <xsl:when test="/root/items/type='for_count'">
  290. <xsl:text>&lt;listOverallGroup&gt;</xsl:text>
  291. <xsl:text>&lt;listFooter&gt;</xsl:text>
  292. <xsl:text>&lt;listRows&gt;</xsl:text>
  293. <xsl:text>&lt;listRow&gt;</xsl:text>
  294. <xsl:text>&lt;rowCells&gt;</xsl:text>
  295. <xsl:text>&lt;rowCell colSpan=&quot;1&quot; &gt;</xsl:text>
  296. <xsl:text>&lt;style&gt;&lt;defaultStyles&gt;&lt;defaultStyle refStyle="of"/&gt;&lt;/defaultStyles&gt;&lt;/style&gt;</xsl:text>
  297. <xsl:text>&lt;contents&gt;</xsl:text>
  298. <xsl:text>&lt;textItem&gt;</xsl:text>
  299. <xsl:text>&lt;dataSource&gt;</xsl:text>
  300. <xsl:text>&lt;staticValue&gt;</xsl:text>Count<xsl:text>&lt;/staticValue&gt;</xsl:text>
  301. <xsl:text>&lt;/dataSource&gt;</xsl:text>
  302. <xsl:text>&lt;/textItem&gt;</xsl:text>
  303. <xsl:text>&lt;/contents&gt;</xsl:text>
  304. <xsl:text>&lt;/rowCell&gt;</xsl:text>
  305. <xsl:text>&lt;rowCell &gt;</xsl:text>
  306. <xsl:text>&lt;style&gt;&lt;defaultStyles&gt;&lt;defaultStyle refStyle="os"/&gt;&lt;/defaultStyles&gt;&lt;/style&gt;</xsl:text>
  307. <xsl:text>&lt;contents&gt;</xsl:text>
  308. <xsl:text>&lt;textItem&gt;</xsl:text>
  309. <xsl:text>&lt;dataSource&gt;</xsl:text>
  310. <xsl:text>&lt;dataItemValue refDataItem=&quot;_const&quot;/&gt;</xsl:text>
  311. <xsl:text>&lt;/dataSource&gt;</xsl:text>
  312. <xsl:text>&lt;/textItem&gt;</xsl:text>
  313. <xsl:text>&lt;/contents&gt;</xsl:text>
  314. <xsl:text>&lt;/rowCell&gt;</xsl:text>
  315. <xsl:text>&lt;/rowCells&gt;</xsl:text>
  316. <xsl:text>&lt;/listRow&gt;</xsl:text>
  317. <xsl:text>&lt;/listRows&gt;</xsl:text>
  318. <xsl:text>&lt;/listFooter&gt;</xsl:text>
  319. <xsl:text>&lt;/listOverallGroup&gt;</xsl:text>
  320. </xsl:when>
  321. <xsl:when test="count(/root/items/group) > 0">
  322. <xsl:text>&lt;listGroups&gt;</xsl:text>
  323. <xsl:for-each select="/root/items/group">
  324. <xsl:if test="@ref">
  325. <xsl:text>&lt;listGroup refDataItem=&quot;</xsl:text>
  326. <xsl:value-of select="@ref"/>
  327. <xsl:text>&quot;/&gt;</xsl:text>
  328. </xsl:if>
  329. </xsl:for-each>
  330. <xsl:text>&lt;/listGroups&gt;</xsl:text>
  331. </xsl:when>
  332. </xsl:choose>
  333. </xsl:template>
  334. <xsl:template name="buildStyle">
  335. <!-- do not apply styles for count report specification-->
  336. <xsl:if test="not(/root/items/type='for_count')">
  337. <xsl:text>&lt;style&gt;</xsl:text>
  338. <xsl:text>&lt;CSS value=&quot;border-collapse:collapse&quot;/&gt;</xsl:text>
  339. <xsl:text>&lt;/style&gt;</xsl:text>
  340. </xsl:if>
  341. </xsl:template>
  342. <xsl:template name="buildSorts">
  343. <xsl:if test="count(/root/items/sort) > 0">
  344. <xsl:text>&lt;sortList&gt;</xsl:text>
  345. <xsl:for-each select="/root/items/sort">
  346. <xsl:call-template name="buildSortItem"/>
  347. </xsl:for-each>
  348. <xsl:text>&lt;/sortList&gt;</xsl:text>
  349. </xsl:if>
  350. </xsl:template>
  351. <!-- build the <sortItem/> element -->
  352. <xsl:template name="buildSortItem">
  353. <xsl:if test="@order">
  354. <xsl:text>&lt;sortItem refDataItem=&quot;</xsl:text>
  355. <xsl:value-of select="@ref"/>
  356. <xsl:text>&quot;&gt;</xsl:text>
  357. <xsl:attribute name="sortOrder">
  358. <xsl:if test="@order > 0"><xsl:text>ascending</xsl:text></xsl:if>
  359. <xsl:if test="@order > 0"><xsl:text>descending</xsl:text></xsl:if>
  360. </xsl:attribute>
  361. <xsl:text>&lt;/sortItem&gt;</xsl:text>
  362. </xsl:if>
  363. </xsl:template>
  364. <!-- create the report drill throughs using the input metadata :
  365. <drill id="id" path="path" name="name">
  366. <links>
  367. <link name="name" topic="topic"/>
  368. </links>
  369. ...
  370. </drill>
  371. ...
  372. -->
  373. <xsl:template name="createDrills">
  374. <xsl:if test="count(./drill)>0">
  375. <xsl:variable name="d" select="./drill"/>
  376. <xsl:text>&lt;reportDrills&gt;</xsl:text>
  377. <xsl:text>&lt;reportDrill name=&quot;</xsl:text>
  378. <xsl:value-of select="$d/@id"/>
  379. <xsl:text>&quot;&gt;</xsl:text>
  380. <xsl:text>&lt;drillLabel&gt;</xsl:text>
  381. <xsl:text>&lt;dataSource&gt;</xsl:text>
  382. <xsl:text>&lt;staticValue/&gt;</xsl:text>
  383. <xsl:text>&lt;/dataSource&gt;</xsl:text>
  384. <xsl:text>&lt;/drillLabel&gt;</xsl:text>
  385. <xsl:text>&lt;drillTarget&gt;</xsl:text>
  386. <xsl:text>&lt;reportPath path=&quot;</xsl:text>
  387. <xsl:value-of select="xtsext:xmlencode(string($d/@path))"/>
  388. <xsl:text>&quot;&gt;</xsl:text>
  389. <xsl:text>&lt;XMLAttributes&gt;</xsl:text>
  390. <xsl:text>&lt;XMLAttribute name=&quot;ReportName&quot; value=&quot;</xsl:text>
  391. <xsl:value-of select="xtsext:xmlencode(string($d/@name))"/>
  392. <xsl:text>&quot;/&gt;</xsl:text>
  393. <xsl:text>&lt;XMLAttribute name=&quot;class&quot; value=&quot;report&quot;/&gt;</xsl:text>
  394. <xsl:text>&lt;/XMLAttributes&gt;</xsl:text>
  395. <xsl:text>&lt;/reportPath&gt;</xsl:text>
  396. <xsl:text>&lt;drillLinks&gt;</xsl:text>
  397. <xsl:for-each select="$d/links/link">
  398. <xsl:text>&lt;drillLink&gt;</xsl:text>
  399. <xsl:text>&lt;drillTargetContext&gt;</xsl:text>
  400. <xsl:text>&lt;parameterContext parameter=&quot;</xsl:text>
  401. <xsl:value-of select="xtsext:xmlencode(string(./@name))"/>
  402. <xsl:text>&quot;/&gt;</xsl:text>
  403. <xsl:text>&lt;/drillTargetContext&gt;</xsl:text>
  404. <xsl:text>&lt;drillSourceContext&gt;</xsl:text>
  405. <xsl:text>&lt;dataItemContext refDataItem=&quot;</xsl:text>
  406. <xsl:value-of select="xtsext:xmlencode(string(./@topic))"/>
  407. <xsl:text>&quot;/&gt;</xsl:text>
  408. <xsl:text>&lt;/drillSourceContext&gt;</xsl:text>
  409. <xsl:text>&lt;/drillLink&gt;</xsl:text>
  410. </xsl:for-each>
  411. <xsl:text>&lt;/drillLinks&gt;</xsl:text>
  412. <xsl:text>&lt;/drillTarget&gt;</xsl:text>
  413. <xsl:text>&lt;/reportDrill&gt;</xsl:text>
  414. <xsl:text>&lt;/reportDrills&gt;</xsl:text>
  415. </xsl:if>
  416. </xsl:template>
  417. </xsl:stylesheet>
  418. </xts:block>
  419. <!--
  420. ===============================================================================================
  421. genMarkup - Produce the much needed XML response
  422. ===============================================================================================
  423. -->
  424. <!-- call the getExternalRequest to see if the request came from the /ext entry point -->
  425. <xts:block id="getExternalRequest" dependency="buildSpecification" processor="XSLT" type="exec">
  426. <xts:logicsheet path="logicsheets/portal.xsl"/>
  427. <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">
  428. <pf:variables/>
  429. <xsl:template match="/">
  430. <xts:sequence>
  431. <xts:append>
  432. <externalRequest>
  433. <xts:function name="getRequestExternal" xmlns:xts="http://developer.cognos.com/schemas/xts/">
  434. <xts:param name="passport">
  435. <xsl:value-of select="$passport"/>
  436. </xts:param>
  437. <xts:param name="secureState">
  438. <xsl:value-of select="/root/header/*[local-name()='biBusHeader']/*[local-name()='CAF']/*[local-name()='secureState']"/>
  439. </xts:param>
  440. </xts:function>
  441. </externalRequest>
  442. </xts:append>
  443. </xts:sequence>
  444. </xsl:template>
  445. </xsl:stylesheet>
  446. </xts:block>
  447. <!-- depending on the output of the getExternalRequest request - sign the request -->
  448. <xts:block id="signSpecification" dependency="getExternalRequest" processor="XSLT" type="exec" nodelist="getRequestExternalResponse,specification">
  449. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt">
  450. <xsl:template match="/">
  451. <xts:sequence>
  452. <xts:append>
  453. <signedSpec>
  454. <xsl:choose>
  455. <xsl:when test="/root/getRequestExternalResponse">
  456. <xts:function name="signReportSpec" xmlns:xts="http://developer.cognos.com/schemas/xts/">
  457. <xts:param name="source">
  458. <xsl:copy-of select="/root/specification"/>
  459. </xts:param>
  460. </xts:function>
  461. </xsl:when>
  462. <xsl:otherwise>
  463. <xsl:copy-of select="/root/specification"/>
  464. </xsl:otherwise>
  465. </xsl:choose>
  466. </signedSpec>
  467. </xts:append>
  468. </xts:sequence>
  469. </xsl:template>
  470. </xsl:stylesheet>
  471. </xts:block>
  472. <!-- build the output we want with the signed request -->
  473. <xts:block id="makeRequest" dependency="signSpecification" mode="output" mimeType="application/xml; charset=utf-8" processor="XSLT" type="exec" nodelist="signedSpec">
  474. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt" version="1.0">
  475. <xsl:output method="xml" version="1.0" encoding="UTF-8"/>
  476. <!-- build the metadata request -->
  477. <xsl:template match="/">
  478. <xsl:call-template name="buildSpec"/>
  479. </xsl:template>
  480. <xsl:template name="buildSpec">
  481. <bus:value xsi:type="bus:specification" xmlns:bus="http://developer.cognos.com/schemas/bibus/3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  482. <xsl:value-of select="/root/signedSpec"/>
  483. </bus:value>
  484. </xsl:template>
  485. </xsl:stylesheet>
  486. </xts:block>
  487. </xts:morphlet>