AuthoredDrillAction.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. /*
  2. *+------------------------------------------------------------------------+
  3. *| Licensed Materials - Property of IBM
  4. *| IBM Cognos Products: Viewer
  5. *| (C) Copyright IBM Corp. 2001, 2016
  6. *|
  7. *| US Government Users Restricted Rights - Use, duplication or
  8. *| disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  9. *|
  10. *+------------------------------------------------------------------------+
  11. */
  12. /**
  13. * Implements authored drill through
  14. */
  15. function AuthoredDrillAction()
  16. {
  17. this.m_drillTargetSpecification = "";
  18. }
  19. AuthoredDrillAction.prototype = new CognosViewerAction();
  20. AuthoredDrillAction.prototype.setRequestParms = function(drillTargetSpecification)
  21. {
  22. this.m_drillTargetSpecification = drillTargetSpecification;
  23. };
  24. AuthoredDrillAction.prototype.executeDrillTarget = function(drillTargetSpecification)
  25. {
  26. var drillTargetNode = XMLHelper_GetFirstChildElement( XMLBuilderLoadXMLFromString (drillTargetSpecification) );
  27. var sBookmarkRef = encodeURIComponent(drillTargetNode.getAttribute("bookmarkRef"));
  28. var sTargetPath = drillTargetNode.getAttribute("path");
  29. var bShowInNewWindow = this._shouldShowInNewWindow(drillTargetNode);
  30. var oCV = this.getCognosViewer();
  31. if((sBookmarkRef !== null && sBookmarkRef !== "") && (sTargetPath === null || sTargetPath === ""))
  32. {
  33. var sBookmarkPage = drillTargetNode.getAttribute("bookmarkPage");
  34. if (sBookmarkPage && sBookmarkPage !== "") {
  35. oCV.executeAction("GotoPage",{ "pageNumber": sBookmarkPage,"anchorName": sBookmarkRef} );
  36. } else {
  37. document.location = "#" + sBookmarkRef;
  38. }
  39. }
  40. else
  41. {
  42. var sTarget = "";
  43. if(bShowInNewWindow)
  44. {
  45. sTarget = "_blank";
  46. }
  47. var aArguments = [];
  48. var objPathArguments = [];
  49. objPathArguments.push("obj");
  50. objPathArguments.push(sTargetPath);
  51. aArguments[aArguments.length] = objPathArguments;
  52. var bHasPropertyToPass = false;
  53. var drillParameterArguments, drillParameterNode, sValue, sName, sNil;
  54. var drillParameterNodes = XMLHelper_FindChildrenByTagName(drillTargetNode, "drillParameter", false);
  55. for(var index = 0; index < drillParameterNodes.length; ++index)
  56. {
  57. drillParameterArguments = [];
  58. drillParameterNode = drillParameterNodes[index];
  59. sValue = drillParameterNode.getAttribute("value");
  60. sName = drillParameterNode.getAttribute("name");
  61. if(sValue !== null && sValue !== "")
  62. {
  63. drillParameterArguments.push("p_" + sName);
  64. drillParameterArguments.push(this.buildSelectionChoicesSpecification(drillParameterNode));
  65. }
  66. sNil = drillParameterNode.getAttribute("nil");
  67. if(sNil !== null && sNil !== "")
  68. {
  69. drillParameterArguments.push("p_" + sName);
  70. drillParameterArguments.push(this.buildSelectionChoicesNilSpecification());
  71. }
  72. if(drillParameterArguments.length > 0)
  73. {
  74. aArguments[aArguments.length] = drillParameterArguments;
  75. }
  76. if( !bHasPropertyToPass){
  77. var sPropertyToPass = drillParameterNode.getAttribute( "propertyToPass");
  78. bHasPropertyToPass = ( sPropertyToPass && sPropertyToPass.length > 0 ) ? true : false;
  79. }
  80. }
  81. var sMethod = drillTargetNode.getAttribute("method");
  82. var sOutputFormat = drillTargetNode.getAttribute("outputFormat");
  83. var sOutputLocale = drillTargetNode.getAttribute("outputLocale");
  84. var sPrompt = drillTargetNode.getAttribute("prompt");
  85. var dynamicDrill = drillTargetNode.getAttribute("dynamicDrill");
  86. var sSourceContext = this.getXMLNodeAsString(drillTargetNode, "parameters");
  87. var sObjectPaths = this.getXMLNodeAsString(drillTargetNode, "objectPaths");
  88. var oCVId = oCV.getId();
  89. // if the source and target are the same report, and the prompt attribute in drill definition is not set to true, and we're not opening a new window, then do a forward instead of a drillThrough action
  90. var formWarpRequest = document.forms["formWarpRequest" + oCVId];
  91. var callForward = oCV.getAdvancedServerProperty("VIEWER_JS_CALL_FORWARD_DRILLTHROUGH_TO_SELF");
  92. if ( (!callForward || callForward.toLowerCase() !== "false") && sPrompt != "true" && this.isSameReport(formWarpRequest, sTargetPath) && this.isSameReportFormat(sOutputFormat) && !bShowInNewWindow && !bHasPropertyToPass )
  93. {
  94. var cognosViewerRequest = new ViewerDispatcherEntry(oCV);
  95. cognosViewerRequest.addFormField("ui.action", "forward");
  96. if(oCV !== null && typeof oCV.rvMainWnd != "undefined")
  97. {
  98. oCV.rvMainWnd.addCurrentReportToReportHistory();
  99. var reportHistorySpecification = oCV.rvMainWnd.saveReportHistoryAsXML();
  100. cognosViewerRequest.addFormField("cv.previousReports", reportHistorySpecification);
  101. }
  102. // if we're drilling through to ourself we need to send empty parameters for
  103. // the parameters that are setup to no send any parameter values
  104. for(index = 0; index < drillParameterNodes.length; ++index)
  105. {
  106. drillParameterArguments = [];
  107. drillParameterNode = drillParameterNodes[index];
  108. sValue = drillParameterNode.getAttribute("value");
  109. sName = drillParameterNode.getAttribute("name");
  110. sNil = drillParameterNode.getAttribute("nil");
  111. if((sNil === null || sNil === "") && (sValue === null || sValue === ""))
  112. {
  113. drillParameterArguments.push("p_" + sName);
  114. drillParameterArguments.push(this.buildSelectionChoicesNilSpecification());
  115. }
  116. if(drillParameterArguments.length > 0)
  117. {
  118. aArguments[aArguments.length] = drillParameterArguments;
  119. }
  120. }
  121. for (index=1; index < aArguments.length; index++)
  122. {
  123. cognosViewerRequest.addFormField(aArguments[index][0], aArguments[index][1]);
  124. }
  125. cognosViewerRequest.addFormField("_drillThroughToSelf", "true");
  126. // If we're dealing with a tabbed report and drilling to ourselves, then make sure we show the first tab when the report refreshes
  127. if (oCV.m_tabsPayload && oCV.m_tabsPayload.tabs) {
  128. cognosViewerRequest.addFormField("generic.anyURI.http://developer.cognos.com/ceba/constants/runOptionEnum#pageGroup", oCV.m_tabsPayload.tabs[0].id)
  129. }
  130. oCV.setUsePageRequest(true);
  131. oCV.dispatchRequest(cognosViewerRequest);
  132. if (typeof oCV.m_viewerFragment == "undefined") {
  133. var objectRef = getCognosViewerObjectRefAsString(oCVId);
  134. setTimeout(objectRef+".getRequestIndicator().show()",10);
  135. }
  136. }
  137. else
  138. {
  139. doSingleDrill(sTarget, aArguments, sMethod, sOutputFormat, sOutputLocale, sBookmarkRef, sSourceContext, sObjectPaths, this.getCognosViewer().getId(), sPrompt, dynamicDrill);
  140. }
  141. }
  142. };
  143. AuthoredDrillAction.prototype._shouldShowInNewWindow = function(drillTargetNode) {
  144. return drillTargetNode.getAttribute("showInNewWindow") == "true";
  145. };
  146. AuthoredDrillAction.prototype.isSameReport = function( formWarpRequest, sTargetPath )
  147. {
  148. if( formWarpRequest["ui.object"] && sTargetPath == formWarpRequest["ui.object"].value )
  149. {
  150. return true;
  151. }
  152. return false;
  153. };
  154. AuthoredDrillAction.prototype.isSameReportFormat = function( drillTargetFormat )
  155. {
  156. var drillSourceFormat = this.getCognosViewer().envParams["run.outputFormat"];
  157. if( drillSourceFormat )
  158. {
  159. if (drillTargetFormat == drillSourceFormat )
  160. {
  161. return true;
  162. }
  163. //the following case occurs when the target drill-thru definition is set to default format
  164. // and the source format is HTML.
  165. else if( drillSourceFormat == "HTML" && drillTargetFormat == "HTMLFragment")
  166. {
  167. return true;
  168. }
  169. }
  170. return false;
  171. };
  172. AuthoredDrillAction.prototype.getXMLNodeAsString = function(drillTargetNode, sNodeName)
  173. {
  174. var sXML = "";
  175. if(drillTargetNode != null)
  176. {
  177. var node = XMLHelper_FindChildByTagName(drillTargetNode, sNodeName, false);
  178. if(node != null)
  179. {
  180. sXML = XMLBuilderSerializeNode(node);
  181. }
  182. }
  183. return sXML;
  184. };
  185. AuthoredDrillAction.prototype.execute = function(rvDrillTargetsSpecification)
  186. {
  187. if(this.m_drillTargetSpecification != "")
  188. {
  189. this.executeDrillTarget(this.m_drillTargetSpecification);
  190. }
  191. else if(typeof rvDrillTargetsSpecification != "undefined")
  192. {
  193. var drillTargetSpecifications = this.getCognosViewer().getDrillTargets();
  194. var rvDrillTargetsNode = this.getAuthoredDrillThroughContext(rvDrillTargetsSpecification, drillTargetSpecifications);
  195. var drillTargets = rvDrillTargetsNode.childNodes;
  196. if(drillTargets.length == 1)
  197. {
  198. this.executeDrillTarget(XMLBuilderSerializeNode(drillTargets[0]));
  199. }
  200. else
  201. {
  202. doMultipleDrills(XMLBuilderSerializeNode(rvDrillTargetsNode), this.getCognosViewer().getId());
  203. //Need support from goto page
  204. //this.showDrillTargets(drillTargets);
  205. }
  206. }
  207. };
  208. AuthoredDrillAction.prototype.showDrillTargets = function(drillTargets)
  209. {
  210. var sAuthoredDrillThroughContext = "<context>";
  211. for(var index = 0; index < drillTargets.length; ++index)
  212. {
  213. var drillTarget = drillTargets[index];
  214. sAuthoredDrillThroughContext += "<member>";
  215. var sName = drillTarget.getAttribute("label");
  216. sAuthoredDrillThroughContext += "<name>";
  217. sAuthoredDrillThroughContext += sXmlEncode(sName);
  218. sAuthoredDrillThroughContext += "</name>";
  219. var sDrillThroughSearchPath = drillTarget.getAttribute("path");
  220. sAuthoredDrillThroughContext += "<drillThroughSearchPath>";
  221. sAuthoredDrillThroughContext += sXmlEncode(sDrillThroughSearchPath);
  222. sAuthoredDrillThroughContext += "</drillThroughSearchPath>";
  223. var sDrillThroughAction = drillTarget.getAttribute("method");
  224. sAuthoredDrillThroughContext += "<drillThroughAction>";
  225. sAuthoredDrillThroughContext += sXmlEncode(sDrillThroughAction);
  226. sAuthoredDrillThroughContext += "</drillThroughAction>";
  227. var sDrillThroughFormat = drillTarget.getAttribute("outputFormat");
  228. sAuthoredDrillThroughContext += "<drillThroughFormat>";
  229. sAuthoredDrillThroughContext += sXmlEncode(sDrillThroughFormat);
  230. sAuthoredDrillThroughContext += "</drillThroughFormat>";
  231. var sData = "parent." + this.getTargetReportRequestString(drillTarget);
  232. sAuthoredDrillThroughContext += "<data>";
  233. sAuthoredDrillThroughContext += sXmlEncode(sData);
  234. sAuthoredDrillThroughContext += "</data>";
  235. sAuthoredDrillThroughContext += "</member>";
  236. }
  237. sAuthoredDrillThroughContext += "</context>";
  238. // need to fix the ui.backURL and errURL since they'll be getting rejected by caf. TODO post BSEINS
  239. //cvLoadDialog(this.getCognosViewer(), {"m":"portal/goto.xts","ui.backURL":"javascript:parent.destroyCModal();", "errURL":"javascript:parent.destroyCModal();","authoredDrillthru":sAuthoredDrillThroughContext}, 600, 425);
  240. };
  241. AuthoredDrillAction.prototype.populateContextMenu = function(rvDrillTargetsSpecification)
  242. {
  243. var viewer = this.getCognosViewer();
  244. var toolbarCtrl = viewer.rvMainWnd.getToolbarControl();
  245. var authoredDrillDropDownMenu = null;
  246. if (typeof toolbarCtrl != "undefined" && toolbarCtrl != null)
  247. {
  248. var toolbarButton = toolbarCtrl.getItem("goto");
  249. if (toolbarButton)
  250. {
  251. authoredDrillDropDownMenu = toolbarButton.getMenu();
  252. }
  253. }
  254. var cognosViewerContextMenu = viewer.rvMainWnd.getContextMenu();
  255. var authoredDrillContextMenu = null;
  256. if (typeof cognosViewerContextMenu != "undefined" && cognosViewerContextMenu != null)
  257. {
  258. authoredDrillContextMenu = cognosViewerContextMenu.getGoToMenuItem().getMenu();
  259. }
  260. if(authoredDrillDropDownMenu != null || authoredDrillContextMenu != null)
  261. {
  262. var drillTargetSpecifications = this.getCognosViewer().getDrillTargets();
  263. var rvDrillTargetsNode = this.getAuthoredDrillThroughContext(rvDrillTargetsSpecification, drillTargetSpecifications);
  264. var drillTargets = rvDrillTargetsNode.childNodes;
  265. if(drillTargets.length > 0)
  266. {
  267. for(var index = 0; index < drillTargets.length; ++index)
  268. {
  269. var drillTarget = drillTargets[index];
  270. var sRequestString = getCognosViewerObjectRefAsString(this.getCognosViewer().getId()) + ".m_oDrillMgr.executeAuthoredDrill(\"" + encodeURIComponent(XMLBuilderSerializeNode(drillTarget)) + "\");";
  271. var sIconPath = this.getTargetReportIconPath(drillTarget);
  272. var sLabel = drillTarget.getAttribute("label");
  273. if(isViewerBidiEnabled()){
  274. var bidi = BidiUtils.getInstance();
  275. sLabel = bidi.btdInjectUCCIntoStr(sLabel, getViewerBaseTextDirection());
  276. }
  277. if (authoredDrillDropDownMenu != null)
  278. {
  279. new CMenuItem(authoredDrillDropDownMenu, sLabel, sRequestString, sIconPath, gMenuItemStyle, viewer.getWebContentRoot(), viewer.getSkin());
  280. }
  281. if (authoredDrillContextMenu != null)
  282. {
  283. new CMenuItem(authoredDrillContextMenu, sLabel, sRequestString, sIconPath, gMenuItemStyle, viewer.getWebContentRoot(), viewer.getSkin());
  284. }
  285. }
  286. }
  287. }
  288. };
  289. AuthoredDrillAction.prototype.buildSelectionChoicesNilSpecification = function()
  290. {
  291. return "<selectChoices/>";
  292. };
  293. AuthoredDrillAction.prototype.buildSelectionChoicesSpecification = function(drillParameterNode)
  294. {
  295. var sSelectionChoicesSpecification = "";
  296. var sValue = drillParameterNode.getAttribute("value");
  297. if(sValue != null)
  298. {
  299. var propToPass = drillParameterNode.getAttribute("propertyToPass");
  300. sSelectionChoicesSpecification += "<selectChoices";
  301. if (propToPass != null && propToPass != "")
  302. {
  303. sSelectionChoicesSpecification += " propertyToPass=\"";
  304. sSelectionChoicesSpecification += sXmlEncode(propToPass);
  305. sSelectionChoicesSpecification += "\"";
  306. }
  307. sSelectionChoicesSpecification += ">";
  308. // if RSVP already generated the selectChoices, grab everything AFTER the <selectChoices>
  309. if(sValue.indexOf("<selectChoices>") != -1)
  310. {
  311. sSelectionChoicesSpecification += sValue.substring(sValue.indexOf("<selectChoices>") + 15);
  312. }
  313. else if(sValue != "")
  314. {
  315. sSelectionChoicesSpecification += "<selectOption ";
  316. var sMun = drillParameterNode.getAttribute("mun");
  317. if(sMun != null && sMun != "")
  318. {
  319. var encodedMun = sXmlEncode(sMun);
  320. sSelectionChoicesSpecification += "useValue=\"";
  321. sSelectionChoicesSpecification += encodedMun;
  322. sSelectionChoicesSpecification += "\" ";
  323. sSelectionChoicesSpecification += "mun=\"";
  324. sSelectionChoicesSpecification += encodedMun;
  325. sSelectionChoicesSpecification += "\" ";
  326. sSelectionChoicesSpecification += "displayValue=\"";
  327. sSelectionChoicesSpecification += sXmlEncode(sValue);
  328. sSelectionChoicesSpecification += "\"";
  329. }
  330. else
  331. {
  332. sSelectionChoicesSpecification += "useValue=\"";
  333. sSelectionChoicesSpecification += sXmlEncode(sValue);
  334. sSelectionChoicesSpecification += "\" ";
  335. var sDisplayValue = drillParameterNode.getAttribute("displayValue");
  336. if(sDisplayValue == null || sDisplayValue == "")
  337. {
  338. sDisplayValue = sValue;
  339. }
  340. sSelectionChoicesSpecification += "displayValue=\"";
  341. sSelectionChoicesSpecification += sXmlEncode(sDisplayValue);
  342. sSelectionChoicesSpecification += "\"";
  343. }
  344. sSelectionChoicesSpecification += "/>";
  345. sSelectionChoicesSpecification += "</selectChoices>";
  346. }
  347. }
  348. return sSelectionChoicesSpecification;
  349. };
  350. AuthoredDrillAction.prototype.getPropertyToPass = function(parameterName, parameterProperties)
  351. {
  352. if (parameterName != null && parameterName != "" && parameterProperties != null)
  353. {
  354. var parameterNodes = parameterProperties.childNodes;
  355. if (parameterNodes != null)
  356. {
  357. for(var index = 0; index < parameterNodes.length; ++index)
  358. {
  359. var parameterNode = parameterNodes[index];
  360. var sName = "";
  361. if (parameterNode.getAttribute("name") != null)
  362. {
  363. sName = parameterNode.getAttribute("name");
  364. }
  365. if (sName == parameterName)
  366. {
  367. return parameterNode.getAttribute("propertyToPass");
  368. }
  369. }
  370. }
  371. }
  372. return "";
  373. };
  374. AuthoredDrillAction.prototype.getTargetReportRequestString = function(drillTargetNode)
  375. {
  376. var sRequestString = "";
  377. var sBookmarkRef = drillTargetNode.getAttribute("bookmarkRef");
  378. var sTargetPath = drillTargetNode.getAttribute("path");
  379. var sShowInNewWindow = drillTargetNode.getAttribute("showInNewWindow");
  380. if((sBookmarkRef != null && sBookmarkRef != "") && (sTargetPath == null || sTargetPath == ""))
  381. {
  382. sRequestString += "document.location=\"#";
  383. sRequestString += sBookmarkRef;
  384. sRequestString += "\";";
  385. }
  386. else
  387. {
  388. sRequestString += "doSingleDrill(";
  389. if(sShowInNewWindow == "true")
  390. {
  391. sRequestString += "\"_blank\",";
  392. }
  393. else
  394. {
  395. sRequestString += "\"\",";
  396. }
  397. sRequestString += "[[\"obj\",\"";
  398. sRequestString += encodeURIComponent(sTargetPath);
  399. sRequestString += "\"]";
  400. var drillParameterNodes = XMLHelper_FindChildrenByTagName(drillTargetNode, "drillParameter", false);
  401. for(var index = 0; index < drillParameterNodes.length; ++index)
  402. {
  403. var drillParameterNode = drillParameterNodes[index];
  404. var sValue = drillParameterNode.getAttribute("value");
  405. var sName = drillParameterNode.getAttribute("name");
  406. if(sValue != null && sValue != "")
  407. {
  408. sRequestString += ", [\"p_" + sName + "\",\"" + encodeURIComponent(this.buildSelectionChoicesSpecification(drillParameterNode)) + "\"]";
  409. }
  410. var sNil = drillParameterNode.getAttribute("nil");
  411. if(sNil != null && sNil != "")
  412. {
  413. sRequestString += "\", [\"p_" + sName + "\",\"" + encodeURIComponent(this.buildSelectionChoicesNilSpecification()) + "\"]";
  414. }
  415. }
  416. sRequestString += "],";
  417. var sMethod = drillTargetNode.getAttribute("method");
  418. sRequestString += "\"" + encodeURIComponent(sMethod) + "\",";
  419. var sOutputFormat = drillTargetNode.getAttribute("outputFormat");
  420. sRequestString += "\"" + encodeURIComponent(sOutputFormat) + "\",";
  421. var sOutputLocale = drillTargetNode.getAttribute("outputLocale");
  422. sRequestString += "\"" + encodeURIComponent(sOutputLocale) + "\",";
  423. sRequestString += "\"" + encodeURIComponent(sBookmarkRef) + "\",";
  424. var sSourceContext = XMLBuilderSerializeNode(XMLHelper_FindChildByTagName(drillTargetNode, "parameters", false));
  425. sRequestString += "\"" + encodeURIComponent(sSourceContext) + "\",";
  426. var sObjectPaths = XMLBuilderSerializeNode(XMLHelper_FindChildByTagName(drillTargetNode, "objectPaths", false));
  427. sRequestString += "\"" + encodeURIComponent(sObjectPaths) + "\",";
  428. sRequestString += "\"" + encodeURIComponent(this.getCognosViewer().getId()) + "\",";
  429. var sPrompt = drillTargetNode.getAttribute("prompt");
  430. sRequestString += "\"" + encodeURIComponent(sPrompt) + "\",";
  431. var dynamicDrill = drillTargetNode.getAttribute("dynamicDrill");
  432. sRequestString += " " + encodeURIComponent(dynamicDrill);
  433. sRequestString += ");";
  434. }
  435. return sRequestString;
  436. };
  437. AuthoredDrillAction.prototype.getTargetReportIconPath = function(drillTarget)
  438. {
  439. var sIconPath = "";
  440. var sBookmarkRef = drillTarget.getAttribute("bookmarkRef");
  441. var drillParameterNode = XMLHelper_FindChildByTagName(drillTarget, "drillParameter", false);
  442. if((sBookmarkRef != null && sBookmarkRef != "") && drillParameterNode == null)
  443. {
  444. sIconPath = "/common/images/spacer.gif";
  445. }
  446. else
  447. {
  448. var sMethod = drillTarget.getAttribute("method");
  449. switch(sMethod)
  450. {
  451. case "editAnalysis":
  452. sIconPath = "/ps/portal/images/icon_ps_analysis.gif";
  453. break;
  454. case "editQuery":
  455. sIconPath = "/ps/portal/images/icon_qs_query.gif";
  456. break;
  457. case "execute":
  458. sIconPath = "/ps/portal/images/action_run.gif";
  459. break;
  460. case "view":
  461. var sOutputFormat = drillTarget.getAttribute("outputFormat");
  462. switch(sOutputFormat)
  463. {
  464. case "HTML":
  465. case "XHTML":
  466. case "HTMLFragment":
  467. sIconPath = "/ps/portal/images/icon_result_html.gif";
  468. break;
  469. case "PDF":
  470. sIconPath = "/ps/portal/images/icon_result_pdf.gif";
  471. break;
  472. case "XML":
  473. sIconPath = "/ps/portal/images/icon_result_xml.gif";
  474. break;
  475. case "CSV":
  476. sIconPath = "/ps/portal/images/icon_result_csv.gif";
  477. break;
  478. case "XLS":
  479. sIconPath = "/ps/portal/images/icon_result_excel.gif";
  480. break;
  481. case "SingleXLS":
  482. sIconPath = "/ps/portal/images/icon_result_excel_single.gif";
  483. break;
  484. case "XLWA":
  485. sIconPath = "/ps/portal/images/icon_result_excel_web_arch.gif";
  486. break;
  487. default:
  488. sIconPath = "/common/images/spacer.gif";
  489. }
  490. break;
  491. default:
  492. sIconPath = "/common/images/spacer.gif";
  493. }
  494. }
  495. return this.getCognosViewer().getWebContentRoot() + sIconPath;
  496. };
  497. AuthoredDrillAction.prototype.getAuthoredDrillThroughContext = function(sAuthoredDrillThroughTargets, drillTargetSpecifications)
  498. {
  499. // validate the incoming arguments
  500. if(typeof sAuthoredDrillThroughTargets != "string" || typeof drillTargetSpecifications != "object")
  501. {
  502. return null;
  503. }
  504. // parse the xml string and validate it
  505. var xmlParsedDrillTargets = XMLBuilderLoadXMLFromString(sAuthoredDrillThroughTargets);
  506. if(xmlParsedDrillTargets == null || xmlParsedDrillTargets.firstChild == null)
  507. {
  508. return null;
  509. }
  510. // validate the root node
  511. var rootNode = XMLHelper_GetFirstChildElement( xmlParsedDrillTargets );
  512. if(XMLHelper_GetLocalName(rootNode) != "AuthoredDrillTargets")
  513. {
  514. return null;
  515. }
  516. // validate the rvDrillTargets node
  517. var rvDrillTargetNodes = XMLHelper_GetFirstChildElement( rootNode );
  518. if(XMLHelper_GetLocalName(rvDrillTargetNodes) != "rvDrillTargets")
  519. {
  520. return null;
  521. }
  522. // validate the drillTargets node
  523. var drillTargets = rvDrillTargetNodes.childNodes;
  524. if(drillTargets === null || drillTargets.length === 0)
  525. {
  526. return null;
  527. }
  528. var rvDrillTargetsElement = self.XMLBuilderCreateXMLDocument("rvDrillTargets");
  529. for(var drillTargetIdx = 0; drillTargetIdx < drillTargets.length; ++drillTargetIdx)
  530. {
  531. if(typeof drillTargets[drillTargetIdx].getAttribute == "undefined")
  532. {
  533. continue;
  534. }
  535. var drillTargetElement = rvDrillTargetsElement.createElement("drillTarget");
  536. rvDrillTargetsElement.documentElement.appendChild(drillTargetElement);
  537. var bookmarkRef = drillTargets[drillTargetIdx].getAttribute("bookmarkRef");
  538. if(bookmarkRef === null)
  539. {
  540. drillTargetElement.setAttribute("bookmarkRef", "");
  541. }
  542. else
  543. {
  544. drillTargetElement.setAttribute("bookmarkRef", bookmarkRef);
  545. }
  546. var bookmarkPage = drillTargets[drillTargetIdx].getAttribute("bookmarkPage");
  547. if(bookmarkPage === null)
  548. {
  549. drillTargetElement.setAttribute("bookmarkPage", "");
  550. }
  551. else
  552. {
  553. drillTargetElement.setAttribute("bookmarkPage", bookmarkPage);
  554. }
  555. var drillTargetRefIdx = drillTargets[drillTargetIdx].getAttribute("drillIdx");
  556. if(drillTargetRefIdx == null)
  557. {
  558. continue;
  559. }
  560. if(drillTargetRefIdx >= drillTargetSpecifications.length)
  561. {
  562. continue;
  563. }
  564. var drillTargetRef = drillTargetSpecifications[drillTargetRefIdx];
  565. if(typeof drillTargetRef != "object")
  566. {
  567. continue;
  568. }
  569. drillTargetElement.setAttribute("outputFormat", drillTargetRef.getOutputFormat());
  570. drillTargetElement.setAttribute("outputLocale", drillTargetRef.getOutputLocale());
  571. drillTargetElement.setAttribute("prompt", drillTargetRef.getPrompt());
  572. drillTargetElement.setAttribute("dynamicDrill", drillTargetRef.isDynamicDrillThrough() ? "true" : "false");
  573. var useLabel = drillTargets[drillTargetIdx].getAttribute("label");
  574. if(useLabel === null || useLabel === "")
  575. {
  576. useLabel = drillTargetRef.getLabel();
  577. }
  578. drillTargetElement.setAttribute("label", useLabel);
  579. drillTargetElement.setAttribute("path", drillTargetRef.getPath());
  580. drillTargetElement.setAttribute("showInNewWindow", drillTargetRef.getShowInNewWindow());
  581. drillTargetElement.setAttribute("method", drillTargetRef.getMethod());
  582. var currentRvDrillTargetNode = rvDrillTargetNodes;
  583. var oParameterProperties = "";
  584. var drillTargetParamProps = drillTargetRef.getParameterProperties();
  585. if (typeof drillTargetParamProps != "undefined" && drillTargetParamProps != null && drillTargetParamProps != "")
  586. {
  587. oParameterProperties = XMLHelper_GetFirstChildElement(XMLBuilderLoadXMLFromString(drillTargetRef.getParameterProperties()));
  588. }
  589. while(currentRvDrillTargetNode)
  590. {
  591. var drillParameters = currentRvDrillTargetNode.childNodes[drillTargetIdx].childNodes;
  592. for(var drillParamIdx = 0; drillParamIdx < drillParameters.length; ++drillParamIdx)
  593. {
  594. var drillParameterElement = drillParameters[drillParamIdx].cloneNode(true);
  595. if (oParameterProperties)
  596. {
  597. var propertyToPass = this.getPropertyToPass(drillParameterElement.getAttribute("name"), oParameterProperties);
  598. if (propertyToPass != null && propertyToPass != "")
  599. {
  600. drillParameterElement.setAttribute("propertyToPass", propertyToPass);
  601. }
  602. }
  603. drillTargetElement.appendChild(drillParameterElement);
  604. }
  605. currentRvDrillTargetNode = currentRvDrillTargetNode.nextSibling;
  606. }
  607. var rootOpenTag = '<root xmlns:bus="http://developer.cognos.com/schemas/bibus/3/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">';
  608. var rootCloseTag = '</root>';
  609. var drillTargetParametersString = rootOpenTag + drillTargetRef.getParameters() + rootCloseTag;
  610. var drillTargetParametersXML = XMLBuilderLoadXMLFromString(drillTargetParametersString);
  611. var oChild = XMLHelper_GetFirstChildElement( XMLHelper_GetFirstChildElement( drillTargetParametersXML ) );
  612. if (oChild)
  613. {
  614. drillTargetElement.appendChild(oChild.cloneNode(true));
  615. }
  616. var drillTargetObjectPathsString = rootOpenTag + drillTargetRef.getObjectPaths() + rootCloseTag;
  617. var drillTargetObjectPathsXML = XMLBuilderLoadXMLFromString(drillTargetObjectPathsString);
  618. oChild = XMLHelper_GetFirstChildElement( XMLHelper_GetFirstChildElement( drillTargetObjectPathsXML ) );
  619. if (oChild)
  620. {
  621. drillTargetElement.appendChild(oChild.cloneNode(true));
  622. }
  623. }
  624. return XMLHelper_GetFirstChildElement(rvDrillTargetsElement);
  625. };