CCognosViewerFragment.js 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350
  1. /*
  2. *+------------------------------------------------------------------------+
  3. *| Licensed Materials - Property of IBM
  4. *| IBM Cognos Products: Viewer
  5. *| (C) Copyright IBM Corp. 2001, 2017
  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. function CCognosViewerFragment(cognosViewer)
  13. {
  14. this.m_cognosViewer = cognosViewer;
  15. this.m_bUseFrameworkEvents = false;
  16. this.m_bSharePromptValues = false;
  17. this.m_bMatchOnParameterNameOnly = false;
  18. this.m_reportParameters = {};
  19. this.m_burstItems = {};
  20. this.m_promptChannel = "";
  21. this.m_bShareDrillEvents = false;
  22. this.m_drillChannel = "";
  23. this.m_bShareAuthoredDrillEvents = false;
  24. this.m_authoredDrillChannel = "";
  25. this.m_fragmentUpdateList = [];
  26. this.m_toolbarProperties = "hidden";
  27. this.m_fragmentWindowState = "";
  28. this.m_bTransientUpdateCalled = false;
  29. this.m_saveReportInProgress = false;
  30. if(cognosViewer && typeof cognosViewer.envParams["fragment.toolbarProperties"] != "undefined")
  31. {
  32. this.m_toolbarProperties = cognosViewer.envParams["fragment.toolbarProperties"];
  33. }
  34. }
  35. CCognosViewerFragment.prototype.fireEventWhenComplete = function() {
  36. var envParams = this.m_cognosViewer.envParams;
  37. if (envParams["fragment.fireEventWhenComplete"] && envParams["fragment.fireEventWhenComplete"].length > 0) {
  38. var fragmentImpl = this.getFragmentObject();
  39. fragmentImpl.raiseEvent(envParams["fragment.fireEventWhenComplete"], "", "");
  40. envParams["fragment.fireEventWhenComplete"] = "";
  41. }
  42. }
  43. CCognosViewerFragment.prototype.isBUX = function()
  44. {
  45. if (this.m_bBux == true)
  46. {
  47. return true;
  48. }
  49. return false;
  50. };
  51. CCognosViewerFragment.prototype.getCognosViewer = function()
  52. {
  53. return this.m_cognosViewer;
  54. };
  55. CCognosViewerFragment.prototype.raiseEvent = function(sEvent, sPayLoad, sScope)
  56. {
  57. if(this.m_bUseFrameworkEvents === false && typeof window.gaRV_INSTANCES != "undefined")
  58. {
  59. for(var viewerInstance = 0; viewerInstance < window.gaRV_INSTANCES.length; ++viewerInstance)
  60. {
  61. var cognosViewer = window.gaRV_INSTANCES[viewerInstance];
  62. if(typeof cognosViewer != "undefined" && this.m_cognosViewer.getId() != cognosViewer.getId() && typeof cognosViewer.m_viewerFragment != "undefined")
  63. {
  64. cognosViewer.m_viewerFragment.viewerEvent(sPayLoad);
  65. }
  66. }
  67. }
  68. else
  69. {
  70. var fragmentImpl = this.getFragmentObject();
  71. fragmentImpl.raiseEvent(sEvent, sPayLoad, sScope);
  72. }
  73. };
  74. CCognosViewerFragment.prototype.addToUpdateList = function(viewerFragment)
  75. {
  76. this.m_fragmentUpdateList.push(viewerFragment);
  77. };
  78. CCognosViewerFragment.prototype.sharePromptValues = function()
  79. {
  80. return this.m_bSharePromptValues;
  81. };
  82. CCognosViewerFragment.prototype.matchOnParameterNameOnly = function()
  83. {
  84. return this.m_bMatchOnParameterNameOnly;
  85. };
  86. CCognosViewerFragment.prototype.hasPromptChannel = function()
  87. {
  88. return (this.m_promptChannel != "");
  89. };
  90. CCognosViewerFragment.prototype.getPromptChannel = function()
  91. {
  92. return this.m_promptChannel;
  93. };
  94. CCognosViewerFragment.prototype.getParameterMap = function()
  95. {
  96. var specMap = this.m_cognosViewer.envParams["fragment.transientSpecMap"];
  97. if(specMap == "burst")
  98. {
  99. return this.m_burstItems;
  100. }
  101. else if (specMap == "parameter")
  102. {
  103. return this.m_reportParameters;
  104. }
  105. // fall back on the ui.action
  106. var sAction = this.m_cognosViewer.envParams["ui.action"];
  107. if(sAction == "view")
  108. {
  109. return this.m_burstItems;
  110. }
  111. else
  112. {
  113. return this.m_reportParameters;
  114. }
  115. };
  116. CCognosViewerFragment.prototype.getPromptValue = function(sParameterName, sModelItem, sPromptChannel)
  117. {
  118. var sValue = null;
  119. if(this.getPromptChannel() == sPromptChannel)
  120. {
  121. var parameterMap = this.getParameterMap();
  122. if(sModelItem != "" && !this.matchOnParameterNameOnly()){
  123. // first try to match on the model item
  124. for(var key in parameterMap)
  125. {
  126. if(parameterMap[key] == sModelItem)
  127. {
  128. if(this.hasPromptChannel() && sParameterName.indexOf("PROMPTCHANNEL_" + this.getPromptChannel()) == -1)
  129. {
  130. continue;
  131. }
  132. sValue = key;
  133. break;
  134. }
  135. }
  136. }
  137. //When modelItem is empty or could not match on the model item, return the parameter name.
  138. if(sValue == null && sParameterName in parameterMap)
  139. {
  140. sValue = sParameterName;
  141. }
  142. }
  143. return sValue;
  144. };
  145. CCognosViewerFragment.prototype.shareDrillEvents = function()
  146. {
  147. return this.m_bShareDrillEvents;
  148. };
  149. CCognosViewerFragment.prototype.hasDrillChannel = function()
  150. {
  151. return (this.m_drillChannel != "");
  152. };
  153. CCognosViewerFragment.prototype.getDrillChannel = function()
  154. {
  155. return this.m_drillChannel;
  156. };
  157. CCognosViewerFragment.prototype.shareAuthoredDrillEvents = function()
  158. {
  159. return this.m_bShareAuthoredDrillEvents;
  160. };
  161. CCognosViewerFragment.prototype.hasAuthoredDrillChannel = function()
  162. {
  163. return (this.m_authoredDrillChannel != "");
  164. };
  165. CCognosViewerFragment.prototype.getAuthoredDrillChannel = function()
  166. {
  167. return this.m_authoredDrillChannel;
  168. };
  169. CCognosViewerFragment.prototype.getFragmentObject = function()
  170. {
  171. var fragmentObject = null;
  172. try
  173. {
  174. fragmentObject = window[this.m_cognosViewer.getId()];
  175. }
  176. catch(exception){}
  177. return fragmentObject;
  178. };
  179. CCognosViewerFragment.prototype.isWaitPage = function()
  180. {
  181. if (this.m_cognosViewer != null && this.m_cognosViewer.isWorking())
  182. {
  183. return true;
  184. }
  185. return false;
  186. };
  187. CCognosViewerFragment.prototype.canShowToolbar = function()
  188. {
  189. if (this.isWaitPage())
  190. {
  191. return false;
  192. }
  193. var fragmentObject = this.getFragmentObject();
  194. if(fragmentObject)
  195. {
  196. switch(this.m_toolbarProperties)
  197. {
  198. case "show":
  199. return true;
  200. case "showMaximized":
  201. return (fragmentObject.windowState == "maximized");
  202. case "showNormal":
  203. return (fragmentObject.windowState == "normal");
  204. default:
  205. return false;
  206. }
  207. }
  208. return false;
  209. };
  210. CCognosViewerFragment.prototype.showToolbar = function(bShow)
  211. {
  212. if(typeof this.m_cognosViewer.rvMainWnd != "undefined")
  213. {
  214. var toolbar = this.m_cognosViewer.rvMainWnd.getToolbar();
  215. if(toolbar)
  216. {
  217. if(bShow)
  218. {
  219. toolbar.showBar();
  220. }
  221. else
  222. {
  223. toolbar.hideBar();
  224. }
  225. return true;
  226. }
  227. }
  228. return false;
  229. };
  230. CCognosViewerFragment.prototype.onloadEvent = function(evt, state)
  231. {
  232. var sourcePayload = (evt && evt.payload) ? evt.payload.source : "";
  233. if (sourcePayload === "cache")
  234. {
  235. if (state) {
  236. var requestHandler = new RequestHandler(this.m_cognosViewer);
  237. requestHandler.updateViewerState(state);
  238. }
  239. // if the payload source flag is set to cache, that means the user did a browser back or forward.
  240. // the best we can do in this situation is to rerun the report from scratch
  241. var frag = this.getFragmentObject();
  242. if (frag != null && typeof frag != "undefined")
  243. {
  244. frag.retrieve("cv.ignoreState=true");
  245. }
  246. }
  247. else
  248. {
  249. this.fireEventWhenComplete();
  250. if (state != null)
  251. {
  252. var requestHandler = new RequestHandler(this.m_cognosViewer);
  253. requestHandler.processInitialResponse(state);
  254. }
  255. if(typeof this.m_cognosViewer.rvMainWnd != "undefined")
  256. {
  257. if (!this.isWaitPage())
  258. {
  259. this.m_cognosViewer.rvMainWnd.draw();
  260. this.showToolbar(this.canShowToolbar());
  261. }
  262. }
  263. }
  264. };
  265. CCognosViewerFragment.prototype.unloadEvent = function(evt)
  266. {
  267. var frag = this.getFragmentObject();
  268. if (frag != null && typeof frag != "undefined")
  269. {
  270. frag.removeEventListener("fragment.load", this.m_cognosViewer.getId() + "handleFragmentLoadEvent", false);
  271. }
  272. this.m_cognosViewer.closeContextMenuAndToolbarMenus();
  273. var selectionController = this.m_cognosViewer.getSelectionController();
  274. selectionController.updateUI(document, selectionController.getSelections(), true, false);
  275. };
  276. CCognosViewerFragment.prototype.refreshEvent = function(evt)
  277. {
  278. this.m_cognosViewer.setKeepSessionAlive(true);
  279. if(typeof this.m_cognosViewer.rvMainWnd != "undefined")
  280. {
  281. this.m_cognosViewer.rvMainWnd.hideOpenMenus();
  282. }
  283. var selectionController =this.m_cognosViewer.getSelectionController();
  284. selectionController.updateUI(document, selectionController.getSelections(), true, false);
  285. };
  286. CCognosViewerFragment.prototype.visibilityChangedEvent = function(evt)
  287. {
  288. if (evt && evt.payload && evt.payload.currentVisibility === "hidden" && evt.payload.newVisibility === "visible")
  289. {
  290. /*
  291. * This is a bug in firefox (https://bugzilla.mozilla.org/show_bug.cgi?id=180802)
  292. * where the pdf plug-in gets destroyed when you set the visibility of the iframe or
  293. * its container to none. However, there is a work-around to set the iframes src attribute
  294. * which will force the plug-in to load again
  295. */
  296. if (this.m_cognosViewer.sBrowser === "moz" && this.m_cognosViewer.rvMainWnd.getCurrentFormat() === "PDF")
  297. {
  298. var oReportIFrame = document.getElementById("CVIFrame" + this.m_cognosViewer.getId());
  299. if (typeof oReportIFrame != "undefined")
  300. {
  301. oReportIFrame.setAttribute("src", oReportIFrame.getAttribute("src"));
  302. }
  303. }
  304. } else if (evt && evt.payload && evt.payload.currentVisibility === "visible") {
  305. this.m_cognosViewer.closeContextMenuAndToolbarMenus();
  306. }
  307. };
  308. CCognosViewerFragment.prototype.retrieveBeforeEvent = function(evt)
  309. {
  310. // if there's no payload then we were called by a transientUpdate
  311. if (typeof evt.payload === "string" && evt.payload.length == 0)
  312. {
  313. if (this.m_cognosViewer.isWorkingOrPrompting() || this.m_bTransientUpdateCalled == true)
  314. {
  315. var frag = this.getFragmentObject();
  316. if (frag != null && typeof frag != "undefined")
  317. {
  318. // this stops the fragment fragment from doing a retrive on us since we're taking care of it.
  319. evt.preventDefault();
  320. var sParams = "cv.ignoreState=true";
  321. for(var param in this.m_cognosViewer.envParams)
  322. {
  323. if(param.indexOf("frag-") != 0 && param != "cv.fragmentEvent" && param != "cv.transientSpec" && param != "cv.actionState" && param != "globalViewerTransient")
  324. {
  325. sParams += "&" + param + encodeURIComponent(this.m_cognosViewer.envParams[param]);
  326. }
  327. }
  328. frag.retrieve(sParams);
  329. }
  330. }
  331. this.m_bTransientUpdateCalled = true;
  332. }
  333. };
  334. CCognosViewerFragment.prototype.windowStateChangedEvent = function(evt)
  335. {
  336. var fragmentObject = this.getFragmentObject();
  337. if(fragmentObject)
  338. {
  339. fragmentObject.windowState = evt.payload.newWindowState;
  340. this.showToolbar(this.canShowToolbar());
  341. }
  342. };
  343. CCognosViewerFragment.prototype.changePromptValues = function(formFields)
  344. {
  345. var sEventPayLoad = "<parameters>";
  346. var bCredentialParameter = false;
  347. var formFieldNames = formFields.keys();
  348. for (var index = 0; index < formFieldNames.length; index++)
  349. {
  350. var requestParam = formFieldNames[index];
  351. if(requestParam.indexOf("p_") == 0)
  352. {
  353. var sParameterValue = formFields.get(requestParam);
  354. requestParam = requestParam.substring(2, requestParam.length);
  355. if(requestParam.indexOf("credential:") == 0)
  356. {
  357. bCredentialParameter = true;
  358. sEventPayLoad += "<parameter name=\"" + sXmlEncode(requestParam) + "\">" + sXmlEncode(sParameterValue) + "</parameter>";
  359. }
  360. else
  361. {
  362. if(this.hasPromptChannel())
  363. {
  364. requestParam = "PROMPTCHANNEL_" + this.getPromptChannel() + requestParam;
  365. }
  366. if(this.getPromptValue(requestParam, "", this.getPromptChannel()) != null)
  367. {
  368. var sModelItem = this.m_reportParameters[requestParam];
  369. sEventPayLoad += "<parameter name=\"" + sXmlEncode(requestParam) + "\" modelItem=\"" + sXmlEncode(sModelItem) + "\">" + sXmlEncode(sParameterValue) + "</parameter>";
  370. }
  371. }
  372. }
  373. }
  374. sEventPayLoad += "</parameters>";
  375. if(bCredentialParameter)
  376. {
  377. sEventPayLoad = "<credentialParameterEntered>" + sEventPayLoad + "</credentialParameterEntered>";
  378. this.raiseEvent("cognos.viewer.*", sEventPayLoad, "page");
  379. }
  380. else if(this.sharePromptValues())
  381. {
  382. sEventPayLoad = "<updatePromptValues>" + sEventPayLoad + "</updatePromptValues>";
  383. return this.viewerEvent(sEventPayLoad);
  384. }
  385. return false;
  386. };
  387. CCognosViewerFragment.prototype.viewerEvent = function(sPayload)
  388. {
  389. var viewerFragmentEvent = new CCognosViewerFragmentEvent(this.m_cognosViewer, sPayload);
  390. return viewerFragmentEvent.execute();
  391. };
  392. CCognosViewerFragment.prototype.raiseAuthoredDrillEvent = function(sDrillSpecification)
  393. {
  394. var sPayLoad = "<authoredDrillThrough>";
  395. sPayLoad += "<authoredDrillChannel>";
  396. sPayLoad += this.getAuthoredDrillChannel();
  397. sPayLoad += "</authoredDrillChannel>";
  398. sPayLoad += sDrillSpecification;
  399. sPayLoad += "</authoredDrillThrough>";
  400. if(this.shareAuthoredDrillEvents())
  401. {
  402. this.raiseEvent("cognos.viewer.*", "<collectAuthoredDrillThroughListeners><controllerFragment>" + this.m_cognosViewer.getId() + "</controllerFragment><authoredDrillChannel>" + this.getAuthoredDrillChannel() + "</authoredDrillChannel><sharePromptValues>" + this.sharePromptValues() +"</sharePromptValues></collectAuthoredDrillThroughListeners>", "page");
  403. }
  404. else
  405. {
  406. this.m_fragmentUpdateList.push(this);
  407. }
  408. for(var index = 0; index < this.m_fragmentUpdateList.length; ++index)
  409. {
  410. var viewerFragmentToUpdate = this.m_fragmentUpdateList[index];
  411. var authoredDrillEvent = new CCognosViewerFragmentEvent(viewerFragmentToUpdate.m_cognosViewer, sPayLoad);
  412. authoredDrillEvent.execute();
  413. }
  414. this.m_fragmentUpdateList = [];
  415. };
  416. CCognosViewerFragment.prototype.getSelectionContext = function()
  417. {
  418. var oCV = this.getCognosViewer();
  419. var modelPath = oCV.getModelPath();
  420. var sSelectionContext = "";
  421. if(typeof getViewerSelectionContext != "undefined" && typeof CSelectionContext != "undefined")
  422. {
  423. sSelectionContext = getViewerSelectionContext(oCV.getSelectionController(), new CSelectionContext(modelPath));
  424. }
  425. return sSelectionContext;
  426. };
  427. CCognosViewerFragment.prototype.raiseAADrillUpEvent = function()
  428. {
  429. var fragmentImpl = this.getFragmentObject();
  430. fragmentImpl.raiseEvent("cognos.viewer.AADrillUp", {"selectionContext":this.getSelectionContext()}, "page");
  431. };
  432. CCognosViewerFragment.prototype.raiseAADrillDownEvent = function()
  433. {
  434. var fragmentImpl = this.getFragmentObject();
  435. fragmentImpl.raiseEvent("cognos.viewer.AADrillDown", {"selectionContext":this.getSelectionContext()}, "page");
  436. };
  437. CCognosViewerFragment.prototype.raiseAuthoredDrillClickEvent = function()
  438. {
  439. var fragmentImpl = this.getFragmentObject();
  440. fragmentImpl.raiseEvent("cognos.viewer.authoredDrillClickEvent", {"selectionContext":this.getSelectionContext()}, "page");
  441. };
  442. CCognosViewerFragment.prototype.raiseGotoContextMenuEvent = function()
  443. {
  444. var oCV = this.getCognosViewer();
  445. var contextMenu = oCV.rvMainWnd.getContextMenu();
  446. var gtContextMenu = null;
  447. if (typeof contextMenu != "undefined" && contextMenu != null)
  448. {
  449. gtContextMenu = contextMenu.getGoToMenuItem().getMenu();
  450. }
  451. if (gtContextMenu != "undefined" && gtContextMenu != null && gtContextMenu.getNumItems() == 0)
  452. {
  453. var fragmentImpl = this.getFragmentObject();
  454. fragmentImpl.raiseEvent("cognos.viewer.gotoContextMenu", {"gotoContextMenu":gtContextMenu, "selectionContext":this.getSelectionContext(),"webContentRoot":oCV.getWebContentRoot(),"skin":oCV.getSkin()}, "page");
  455. }
  456. };
  457. function CCognosViewerFragmentEvent(cognosViewer, sPayload)
  458. {
  459. this.m_cognosViewer = cognosViewer;
  460. this.m_viewerEventSpecification = XMLBuilderLoadXMLFromString(sPayload);
  461. }
  462. CCognosViewerFragmentEvent.prototype.getFragmentObject = function()
  463. {
  464. return this.getViewerFragment().getFragmentObject();
  465. };
  466. CCognosViewerFragmentEvent.prototype.getViewerFragment = function()
  467. {
  468. return this.m_cognosViewer.m_viewerFragment;
  469. };
  470. CCognosViewerFragmentEvent.prototype.getEventNode = function()
  471. {
  472. if(this.m_viewerEventSpecification != null)
  473. {
  474. var eventNode = this.m_viewerEventSpecification.childNodes;
  475. if(eventNode && eventNode.length == 1)
  476. {
  477. return eventNode[0];
  478. }
  479. }
  480. return null;
  481. };
  482. CCognosViewerFragmentEvent.prototype.execute = function()
  483. {
  484. var eventNode = this.getEventNode();
  485. if(eventNode != null)
  486. {
  487. var eventName = eventNode.nodeName;
  488. try
  489. {
  490. this.eventMethod = eval("this." + eventName + "Event");
  491. return this.eventMethod(eventNode);
  492. }
  493. catch(e)
  494. {
  495. }
  496. }
  497. };
  498. CCognosViewerFragmentEvent.prototype.addRequestParams = function(eventSpecification, oParams)
  499. {
  500. for(var index = 0; index < eventSpecification.childNodes.length; ++index)
  501. {
  502. var node = eventSpecification.childNodes[index];
  503. var sName = XMLHelper_GetLocalName(node);
  504. if(sName.indexOf("p_") != 0 && sName != "parameters")
  505. {
  506. var sValue = XMLHelper_GetText(node);
  507. oParams.add(sName, sValue);
  508. }
  509. }
  510. };
  511. CCognosViewerFragmentEvent.prototype.addRequestParameterValues = function(eventSpecification, viewRequestObject)
  512. {
  513. var parameters = XMLHelper_FindChildByTagName(eventSpecification, "parameters", false);
  514. if(parameters != null)
  515. {
  516. var parameterNodes = XMLHelper_FindChildrenByTagName(parameters, "parameter", false);
  517. for(var index = 0; index < parameterNodes.length; ++index)
  518. {
  519. var parameter = parameterNodes[index];
  520. var parameterName = parameter.getAttribute("name");
  521. if(parameterName != null && parameterName != "")
  522. {
  523. var parameterValue = XMLHelper_GetText(parameter);
  524. if(parameterValue != null)
  525. {
  526. viewRequestObject.addFormField("p_" + parameterName, parameterValue);
  527. }
  528. }
  529. }
  530. }
  531. };
  532. CCognosViewerFragmentEvent.prototype.getTransientSpecification = function(updateList)
  533. {
  534. var fragmentImpl = this.getFragmentObject();
  535. var transientSpec = fragmentImpl.transientState["globalViewerTransient"];
  536. if(transientSpec == "" || transientSpec == null)
  537. {
  538. transientSpec = "<parameters>";
  539. for(var fragmentIndex = 0; fragmentIndex < updateList.length; ++fragmentIndex)
  540. {
  541. var viewerFragment = updateList[fragmentIndex];
  542. var sPromptChannel = viewerFragment.getPromptChannel();
  543. var reportParameterList = viewerFragment.m_reportParameters;
  544. for(var reportParameter in reportParameterList)
  545. {
  546. transientSpec += "<parameter name=\"" + sXmlEncode(reportParameter) + "\" modelItem=\"" + sXmlEncode(reportParameterList[reportParameter]) + "\" channel=\"" + sXmlEncode(sPromptChannel) + "\"/>";
  547. }
  548. var burstItemList = updateList[fragmentIndex].m_burstItems;
  549. for(var burstItem in burstItemList)
  550. {
  551. transientSpec += "<parameter name=\"" + sXmlEncode(burstItem) + "\" modelItem=\"" + sXmlEncode(burstItemList[burstItem]) + "\" channel=\"" + sXmlEncode(sPromptChannel) + "\"/>";
  552. }
  553. }
  554. transientSpec += "</parameters>";
  555. }
  556. return transientSpec;
  557. };
  558. CCognosViewerFragmentEvent.prototype.updateGlobalTransientSpec = function(updateList, rootNode, sParameterNodeName)
  559. {
  560. var viewerFragment = this.getViewerFragment();
  561. var viewerFragmentTransient = new CViewerFragmentTransient(this.getTransientSpecification(updateList), viewerFragment);
  562. var parameterList = XMLHelper_FindChildrenByTagName(rootNode, sParameterNodeName, false);
  563. var sPromptChannel = viewerFragment.getPromptChannel();
  564. for(var paramIndex = 0; paramIndex < parameterList.length; ++paramIndex)
  565. {
  566. var parameter = parameterList[paramIndex];
  567. var sParamName = parameter.getAttribute("name");
  568. var sModelItem = parameter.getAttribute("modelItem");
  569. var sParamValue = XMLHelper_GetText(parameter);
  570. if(sParamValue == "")
  571. {
  572. continue;
  573. }
  574. if(sParamValue == "<selectChoices></selectChoices>")
  575. {
  576. if(sParamName in viewerFragmentTransient.m_transientItems)
  577. {
  578. var transientToUpdate = viewerFragmentTransient.m_transientItems[sParamName][sModelItem];
  579. if (typeof transientToUpdate != "undefined")
  580. {
  581. if (transientToUpdate.m_value == "" || transientToUpdate.m_value == sParamValue)
  582. {
  583. continue;
  584. }
  585. }
  586. }
  587. }
  588. for(var fragmentIndex = 0; fragmentIndex < updateList.length; ++fragmentIndex)
  589. {
  590. var fragmentToUpdate = updateList[fragmentIndex];
  591. var sPromptToUpdate = fragmentToUpdate.getPromptValue(sParamName, sModelItem, sPromptChannel);
  592. if(sPromptToUpdate != null)
  593. {
  594. if(sParamName in viewerFragmentTransient.m_transientItems)
  595. {
  596. viewerFragmentTransient.changePromptValue(sPromptToUpdate, sParamValue, sPromptChannel);
  597. }
  598. else
  599. {
  600. viewerFragmentTransient.addTransientItem(sPromptToUpdate, sModelItem, sParamValue, sPromptChannel);
  601. }
  602. }
  603. }
  604. }
  605. var fragmentImpl = this.getFragmentObject();
  606. fragmentImpl.transientUpdate("globalViewerTransient", viewerFragmentTransient.saveTransientSpec(), "application", null, []);
  607. return viewerFragmentTransient;
  608. };
  609. CCognosViewerFragmentEvent.prototype.credentialParameterEnteredEvent = function(credentialParameterEnteredEventSpecification)
  610. {
  611. if(this.m_cognosViewer.getStatus() == "prompting")
  612. {
  613. return this.promptEvent(credentialParameterEnteredEventSpecification, "forward");
  614. }
  615. return false;
  616. };
  617. CCognosViewerFragmentEvent.prototype.updatePromptValuesEvent = function(updatePromptValuesSpecification)
  618. {
  619. var viewerFragment = this.getViewerFragment();
  620. viewerFragment.raiseEvent("cognos.viewer.*", "<collectParameters><controllerFragment>" + this.m_cognosViewer.getId() + "</controllerFragment></collectParameters>", "page");
  621. viewerFragment.m_fragmentUpdateList.push(viewerFragment);
  622. var parameters = XMLHelper_FindChildByTagName(updatePromptValuesSpecification, "parameters", false);
  623. var globalViewerTransient = null;
  624. if(parameters != null)
  625. {
  626. globalViewerTransient = this.updateGlobalTransientSpec(viewerFragment.m_fragmentUpdateList, parameters, "parameter");
  627. }
  628. var transientsToUpdate = [];
  629. for(var fragmentIndex = 0; fragmentIndex < viewerFragment.m_fragmentUpdateList.length; ++fragmentIndex)
  630. {
  631. var fragmentToUpdate = viewerFragment.m_fragmentUpdateList[fragmentIndex];
  632. var parameterMap = fragmentToUpdate.getParameterMap();
  633. for(var parameter in parameterMap)
  634. {
  635. if(globalViewerTransient.hasChanged(parameter, parameterMap[parameter]))
  636. {
  637. var newValue = globalViewerTransient.getTransientValue(parameter, parameterMap[parameter]);
  638. var iUpdateLength = transientsToUpdate.length;
  639. transientsToUpdate[iUpdateLength] = {};
  640. transientsToUpdate[iUpdateLength]["name"] = "p_" + parameter;
  641. transientsToUpdate[iUpdateLength]["scope"] = "application";
  642. transientsToUpdate[iUpdateLength]["value"] = newValue;
  643. }
  644. }
  645. }
  646. if(transientsToUpdate.length > 0)
  647. {
  648. this.getFragmentObject().transientUpdateList(transientsToUpdate, true);
  649. }
  650. viewerFragment.m_fragmentUpdateList = [];
  651. return (transientsToUpdate.length > 0);
  652. };
  653. CCognosViewerFragmentEvent.prototype.collectAuthoredDrillThroughListenersEvent = function(collectAuthoredDrillThroughListenersSpecification)
  654. {
  655. var viewerFragment = this.getViewerFragment();
  656. var controllerFragment = XMLHelper_FindChildByTagName(collectAuthoredDrillThroughListenersSpecification, "controllerFragment", false);
  657. var authoredDrillChannel = XMLHelper_FindChildByTagName(collectAuthoredDrillThroughListenersSpecification, "authoredDrillChannel", false);
  658. var sControllerFragmentId = XMLHelper_GetText(controllerFragment);
  659. var viewerFragmentController = getCognosViewerObjectRef(sControllerFragmentId).m_viewerFragment;
  660. if(viewerFragment.shareAuthoredDrillEvents() && XMLHelper_GetText(authoredDrillChannel) == viewerFragment.getAuthoredDrillChannel())
  661. {
  662. viewerFragmentController.addToUpdateList(viewerFragment);
  663. }
  664. return true;
  665. };
  666. CCognosViewerFragmentEvent.prototype.collectParametersEvent = function(collectParametersSpecification)
  667. {
  668. var viewerFragment = this.getViewerFragment();
  669. if(viewerFragment.sharePromptValues())
  670. {
  671. var controllerFragment = XMLHelper_FindChildByTagName(collectParametersSpecification, "controllerFragment", false);
  672. if(controllerFragment != null)
  673. {
  674. var sControllerFragmentId = XMLHelper_GetText(controllerFragment);
  675. var viewerFragmentController = getCognosViewerObjectRef(sControllerFragmentId).m_viewerFragment;
  676. viewerFragmentController.addToUpdateList(viewerFragment);
  677. }
  678. }
  679. return true;
  680. };
  681. CCognosViewerFragmentEvent.prototype.promptEvent = function(promptEventSpecification, promptEventName)
  682. {
  683. if(this.m_cognosViewer.getConversation() != "")
  684. {
  685. var oReq = new ViewerDispatcherEntry(this.m_cognosViewer);
  686. oReq.addFormField("ui.action", promptEventName);
  687. oReq.addFormField("cv.fragmentEvent", "true");
  688. this.addRequestParameterValues(promptEventSpecification, oReq);
  689. this.m_cognosViewer.dispatchRequest(oReq);
  690. }
  691. return true;
  692. };
  693. CCognosViewerFragmentEvent.prototype.forwardEvent = function(forwardEventSpecification)
  694. {
  695. return this.promptEvent(forwardEventSpecification, "forward");
  696. };
  697. CCognosViewerFragmentEvent.prototype.backEvent = function(backEventSpecification)
  698. {
  699. return this.promptEvent(backEventSpecification, "back");
  700. };
  701. CCognosViewerFragmentEvent.prototype.repromptEvent = function(repromptEventSpecification)
  702. {
  703. // todo find out what needs to be added to the bus header for reprompt and add it in
  704. return this.promptEvent(repromptEventSpecification, "forward");
  705. };
  706. CCognosViewerFragmentEvent.prototype.authoredDrillThroughEvent = function(authoredDrillEventSpecification)
  707. {
  708. var authoredDrillRequest = XMLHelper_FindChildByTagName(authoredDrillEventSpecification, "authoredDrillRequest", false);
  709. var viewerFragment = this.getViewerFragment();
  710. var viewerFragmentImpl = viewerFragment.getFragmentObject();
  711. if(viewerFragment.sharePromptValues() === true)
  712. {
  713. var drillParameters = XMLHelper_FindChildByTagName(authoredDrillRequest, "drillParameters", false);
  714. for(var index = 0; index < drillParameters.childNodes.length; ++index)
  715. {
  716. var drillParameter = drillParameters.childNodes[index];
  717. var sParameterName = drillParameter.getAttribute("name");
  718. if(sParameterName in viewerFragmentImpl.transientState)
  719. {
  720. viewerFragmentImpl.transientNotify(sParameterName, "");
  721. }
  722. }
  723. }
  724. var oReq = new ViewerDispatcherEntry(this.m_cognosViewer);
  725. oReq.addFormField("ui.action", "authoredDrillThrough2");
  726. oReq.addFormField("ui.primaryAction", "");
  727. oReq.addFormField("cv.fragmentEvent", "true");
  728. oReq.addFormField("fragment.fireEventWhenComplete", "cognos.viewer.authoredDrillEvent");
  729. var oCV = viewerFragment.getCognosViewer();
  730. var drillForm = document.getElementById("drillForm");
  731. appendReportHistoryObjects(oCV,drillForm);
  732. for(var i = 0; i < drillForm.childNodes.length; ++i)
  733. {
  734. if(drillForm.childNodes[i].name == "cv.previousReports")
  735. {
  736. oReq.addFormField("cv.previousReports", drillForm.childNodes[i].value);
  737. break;
  738. }
  739. }
  740. oReq.addFormField("authoredDrill.request", XMLBuilderSerializeNode(authoredDrillRequest));
  741. // clean up our current session
  742. this.m_cognosViewer.setKeepSessionAlive(false);
  743. this.m_cognosViewer.release();
  744. if ( viewerFragmentImpl.parent && viewerFragmentImpl.parent.parent )
  745. {
  746. var viewerFragmentGP = viewerFragmentImpl.parent.parent;
  747. if ( viewerFragmentGP.transientState )
  748. {
  749. if ( viewerFragmentGP.transientState.display_id )
  750. {
  751. viewerFragmentGP.transientState.display_id = null;
  752. }
  753. }
  754. }
  755. this.m_cognosViewer.dispatchRequest(oReq);
  756. return true;
  757. };
  758. CCognosViewerFragmentEvent.prototype.renderEvent = function(renderEventSpecification)
  759. {
  760. if(this.m_cognosViewer.getStatus() == "complete" && this.m_cognosViewer.getConversation() != "")
  761. {
  762. var oReq = new ViewerDispatcherEntry(this.m_cognosViewer);
  763. oReq.addFormField("ui.action", "render");
  764. oReq.addFormField("cv.fragmentEvent", "true");
  765. var specificationParams = new CDictionary();
  766. this.addRequestParams(renderEventSpecification, specificationParams);
  767. if(specificationParams.exists("run.outputFormat"))
  768. {
  769. var formFieldNames = specificationParams.keys();
  770. for (var index = 0; index < formFieldNames.length; index++) {
  771. oReq.addFormField(formFieldNames[index], specificationParams.get(formFieldNames[index]));
  772. }
  773. this.m_cognosViewer.dispatchRequest(oReq);
  774. }
  775. }
  776. return true;
  777. };
  778. CCognosViewerFragmentEvent.prototype.viewEvent = function(viewEventSpecification)
  779. {
  780. var oReq = new ViewerDispatcherEntry(this.m_cognosViewer);
  781. oReq.addFormField("ui.action", "view");
  782. oReq.addFormField("cv.fragmentEvent", "true");
  783. var specificationParams = new CDictionary();
  784. this.addRequestParams(viewEventSpecification, specificationParams);
  785. if(!specificationParams.exists("ui.object"))
  786. {
  787. var searchPath = this.m_cognosViewer.envParams["ui.object"];
  788. var sAction = this.m_cognosViewer.envParams["ui.action"];
  789. if(sAction != "view")
  790. {
  791. searchPath = "defaultOutput(" + searchPath + ")";
  792. }
  793. oReq.addFormField("ui.object", searchPath);
  794. }
  795. var formFieldNames = specificationParams.keys();
  796. for (var index = 0; index < formFieldNames.length; index++) {
  797. oReq.addFormField(formFieldNames[index], specificationParams.get(formFieldNames[index]));
  798. }
  799. // clean up our current session
  800. this.m_cognosViewer.setKeepSessionAlive(false);
  801. this.m_cognosViewer.release();
  802. this.m_cognosViewer.dispatchRequest(oReq);
  803. return true;
  804. };
  805. CCognosViewerFragmentEvent.prototype.runSpecificationEvent = function(runSpecificationEventSpecification)
  806. {
  807. var oReq = new ViewerDispatcherEntry(this.m_cognosViewer);
  808. oReq.addFormField("ui.action", "runSpecification");
  809. oReq.addFormField("cv.fragmentEvent", "true");
  810. var specificationParams = new CDictionary();
  811. this.addRequestParams(runSpecificationEventSpecification, specificationParams);
  812. this.addRequestParameterValues(runSpecificationEventSpecification, oReq);
  813. if(specificationParams.exists("ui.spec"))
  814. {
  815. // clean up our current session
  816. this.m_cognosViewer.setKeepSessionAlive(false);
  817. this.m_cognosViewer.release();
  818. // clear the tracking to avoid asynch issues when re-running
  819. this.m_cognosViewer.setTracking("");
  820. var formFieldNames = specificationParams.keys();
  821. for (var index = 0; index < formFieldNames.length; index++) {
  822. oReq.addFormField(formFieldNames[index], specificationParams.get(formFieldNames[index]));
  823. }
  824. this.m_cognosViewer.dispatchRequest(oReq);
  825. return true;
  826. }
  827. else
  828. {
  829. return false;
  830. }
  831. };
  832. CCognosViewerFragmentEvent.prototype.runEvent = function(runEventSpecification)
  833. {
  834. var oReq = new ViewerDispatcherEntry(this.m_cognosViewer);
  835. oReq.addFormField("ui.action", "run");
  836. oReq.addFormField("cv.fragmentEvent", "true");
  837. oReq.addFormField("cv.reUseConversationParameterValues", "false");
  838. var specificationParams = new CDictionary();
  839. this.addRequestParams(runEventSpecification, specificationParams);
  840. this.addRequestParameterValues(runEventSpecification, oReq);
  841. if(!specificationParams.exists("ui.object"))
  842. {
  843. var sAction = this.m_cognosViewer.envParams["ui.action"];
  844. if(sAction == "view")
  845. {
  846. var formWarpRequest = document.getElementById("formWarpRequest" + this.m_cognosViewer.getId());
  847. oReq.addFormField("ui.object", formWarpRequest["reRunObj"].value);
  848. }
  849. else
  850. {
  851. oReq.addFormField("ui.object", this.m_cognosViewer.envParams["ui.object"]);
  852. }
  853. }
  854. var formFieldNames = specificationParams.keys();
  855. for (var index = 0; index < formFieldNames.length; index++) {
  856. oReq.addFormField(formFieldNames[index], specificationParams.get(formFieldNames[index]));
  857. }
  858. // clean up our current session
  859. this.m_cognosViewer.setKeepSessionAlive(false);
  860. this.m_cognosViewer.release();
  861. this.m_cognosViewer.dispatchRequest(oReq);
  862. return true;
  863. };
  864. CCognosViewerFragmentEvent.prototype.drillEvent = function(drillEventSpecification)
  865. {
  866. var viewerFragment = this.getViewerFragment();
  867. if(viewerFragment.shareDrillEvents() && this.m_cognosViewer.getStatus() == "complete" && this.m_cognosViewer.getConversation() != "")
  868. {
  869. var drillChannelNode = XMLHelper_FindChildByTagName(drillEventSpecification, "drillChannel", false);
  870. var sDrillChannel = "";
  871. if(drillChannelNode != null)
  872. {
  873. sDrillChannel = XMLHelper_GetText(drillChannelNode);
  874. }
  875. if(sDrillChannel == viewerFragment.getDrillChannel())
  876. {
  877. var drillParams = XMLHelper_FindChildByTagName(drillEventSpecification, "DrillParameters", false);
  878. if(drillParams != null)
  879. {
  880. var selectionController = getCognosViewerSCObjectRef(this.m_cognosViewer.getId());
  881. var drillParamsArray = [];
  882. var sRefQuery = "";
  883. var drillOptionNode = XMLHelper_FindChildByTagName(drillEventSpecification, "DrillOption", false);
  884. if(drillOptionNode == null) {
  885. return;
  886. }
  887. var sDrillOption = XMLHelper_GetText(drillOptionNode);
  888. var aDrillGroups = XMLHelper_FindChildrenByTagName(drillParams, "DrillGroup", false);
  889. for(var iDrillGroupIndex = 0; iDrillGroupIndex < aDrillGroups.length; ++iDrillGroupIndex)
  890. {
  891. var munNode = XMLHelper_FindChildByTagName(aDrillGroups[iDrillGroupIndex], "MUN", false);
  892. var sMun = XMLHelper_GetText(munNode);
  893. var sCtxId = selectionController.getCtxIdFromMun(sMun);
  894. var sLun = ""; var sHun = "";
  895. var lunNode = XMLHelper_FindChildByTagName(aDrillGroups[iDrillGroupIndex], "LUN", false);
  896. if(lunNode != null)
  897. {
  898. sLun = XMLHelper_GetText(lunNode);
  899. }
  900. var hunNode = XMLHelper_FindChildByTagName(aDrillGroups[iDrillGroupIndex], "HUN", false);
  901. if(hunNode != null)
  902. {
  903. sHun = XMLHelper_GetText(hunNode);
  904. }
  905. if(sCtxId == "")
  906. {
  907. sCtxId = selectionController.getCtxIdFromMetaData(sLun, sHun);
  908. }
  909. if((sDrillOption == "down" && selectionController.canDrillDown(sCtxId)) || (sDrillOption == "up" && selectionController.canDrillUp(sCtxId)))
  910. {
  911. if(sRefQuery == "")
  912. {
  913. sRefQuery = selectionController.getRefQuery(sCtxId);
  914. }
  915. var sDataItem = selectionController.getRefDataItem(sCtxId);
  916. drillParamsArray[drillParamsArray.length] = sDataItem;
  917. drillParamsArray[drillParamsArray.length] = sMun;
  918. drillParamsArray[drillParamsArray.length] = sLun;
  919. drillParamsArray[drillParamsArray.length] = sHun;
  920. }
  921. }
  922. if(drillParamsArray.length > 0)
  923. {
  924. var drillManager = this.m_cognosViewer.getDrillMgr();
  925. var drillParamsSpecification = drillManager.buildDrillParametersSpecification(drillParamsArray);
  926. var oReq = new ViewerDispatcherEntry(this.m_cognosViewer);
  927. oReq.addFormField("ui.action", "drill");
  928. oReq.addFormField("rv_drillOption", sDrillOption);
  929. oReq.addFormField("rv_drillparams", drillParamsSpecification);
  930. oReq.addFormField("rv_drillRefQuery", sRefQuery);
  931. oReq.addFormField("cv.fragmentEvent", "true");
  932. this.m_cognosViewer.dispatchRequest(oReq);
  933. return true;
  934. }
  935. }
  936. }
  937. }
  938. return false;
  939. };
  940. function CViewerFragmentTransient(sSpec, viewerFragment)
  941. {
  942. this.m_viewerFragment = viewerFragment;
  943. this.m_transientItems = {};
  944. var rootNode = XMLBuilderLoadXMLFromString(sSpec);
  945. if(rootNode != null)
  946. {
  947. var parameters = XMLHelper_FindChildByTagName(rootNode, "parameters", false);
  948. if(parameters != null)
  949. {
  950. var parameterNodes = XMLHelper_FindChildrenByTagName(parameters, "parameter", false);
  951. for(var index = 0; index < parameterNodes.length; ++index)
  952. {
  953. var parameter = parameterNodes[index];
  954. var sName = parameter.getAttribute("name");
  955. var sModelItem = parameter.getAttribute("modelItem");
  956. if(sModelItem == null)
  957. {
  958. sModelItem = "";
  959. }
  960. var sPromptChannel = parameter.getAttribute("channel");
  961. if(sPromptChannel == null)
  962. {
  963. sPromptChannel = "";
  964. }
  965. var sValue = XMLHelper_GetText(parameter);
  966. if(typeof this.m_transientItems[sName] == "undefined")
  967. {
  968. this.m_transientItems[sName] = {};
  969. }
  970. this.m_transientItems[sName][sModelItem] = {};
  971. this.m_transientItems[sName][sModelItem].m_value = sValue;
  972. this.m_transientItems[sName][sModelItem].m_promptChannel = sPromptChannel;
  973. }
  974. }
  975. }
  976. }
  977. CViewerFragmentTransient.prototype.getViewerFragment = function()
  978. {
  979. return this.m_viewerFragment;
  980. };
  981. CViewerFragmentTransient.prototype.addTransientItem = function(sParamName, sModelItem, sValue, sPromptChannel)
  982. {
  983. if(typeof this.m_transientItems[sParamName] == "undefined")
  984. {
  985. this.m_transientItems[sParamName] = {};
  986. }
  987. this.m_transientItems[sParamName][sModelItem] = {};
  988. this.m_transientItems[sParamName][sModelItem].m_value = sValue;
  989. this.m_transientItems[sParamName][sModelItem].m_promptChannel = sPromptChannel;
  990. this.m_transientItems[sParamName][sModelItem].m_bNew = true;
  991. };
  992. CViewerFragmentTransient.prototype.changePromptValue = function(sParamName, sValue, sChannel)
  993. {
  994. // determine the items that need to be changed
  995. var affectedModelItems = {};
  996. if(sParamName in this.m_transientItems)
  997. {
  998. for(var modelItem in this.m_transientItems[sParamName])
  999. {
  1000. if(modelItem != "")
  1001. {
  1002. affectedModelItems[modelItem] = true;
  1003. }
  1004. }
  1005. }
  1006. this.updateAffectedItems(sParamName, affectedModelItems, sValue, sChannel);
  1007. };
  1008. CViewerFragmentTransient.prototype.updateAffectedItems = function(sParamName, affectedModelItems, sValue, sChannel)
  1009. {
  1010. //update the affected items
  1011. for(var paramName in this.m_transientItems)
  1012. {
  1013. var bParameterAffected = false;
  1014. var modelItem = null;
  1015. // check the parameter names for both cases "Match on parameter name" and "Match on parameter name & data item"
  1016. // to avoid updating the values of a parameter with the values of another parameter in the code after comment(3) below
  1017. if (paramName == sParamName)
  1018. {
  1019. if (this.getViewerFragment().matchOnParameterNameOnly())
  1020. {
  1021. for(modelItem in this.m_transientItems[paramName])
  1022. {
  1023. if (this.m_transientItems[paramName][modelItem].m_promptChannel == sChannel)
  1024. {
  1025. bParameterAffected = true;
  1026. break;
  1027. }
  1028. }
  1029. }
  1030. else
  1031. {
  1032. // (1) break when the affected parameter is found
  1033. for(var affectedModelItem in affectedModelItems)
  1034. {
  1035. if(affectedModelItem in this.m_transientItems[paramName] && this.m_transientItems[paramName][affectedModelItem].m_promptChannel == sChannel)
  1036. {
  1037. bParameterAffected = true;
  1038. break;
  1039. }
  1040. }
  1041. // (2) special handling if the modelItem is empty
  1042. // the following code should be executed if the above code (1) does not turn on bParameterAffected
  1043. if (bParameterAffected == false && typeof this.m_transientItems[paramName][""] == "object")
  1044. {
  1045. if (this.m_transientItems[paramName][""].m_value != sValue && this.m_transientItems[paramName][""].m_promptChannel == sChannel)
  1046. {
  1047. bParameterAffected = true;
  1048. }
  1049. }
  1050. }
  1051. }
  1052. if(bParameterAffected == true)
  1053. {
  1054. for(modelItem in this.m_transientItems[paramName])
  1055. {
  1056. // (3) defect #186599 - PI81380 CANNOT USE A RANGE PROMPT IN A SPLITPORTLET PAGE COMMUNICATINGBETWEEN EACH OTHER
  1057. // for "Match on paramameter name & data item" the code below was updating the values of a parameter
  1058. // with the values of another parameter because the code under comment (1) wasn't checking if we are dealing with the same parameter
  1059. this.m_transientItems[paramName][modelItem].m_value = sValue;
  1060. this.m_transientItems[paramName][modelItem].m_bNew = true;
  1061. if(modelItem != "" && !(modelItem in affectedModelItems) && !this.getViewerFragment().matchOnParameterNameOnly())
  1062. {
  1063. affectedModelItems[modelItem] = true;
  1064. return this.updateAffectedItems(sParamName, affectedModelItems, sValue, sChannel);
  1065. }
  1066. }
  1067. }
  1068. }
  1069. };
  1070. CViewerFragmentTransient.prototype.getTransientItem = function(sParameterName, sModelItem)
  1071. {
  1072. if(sParameterName in this.m_transientItems)
  1073. {
  1074. if(sModelItem in this.m_transientItems[sParameterName])
  1075. {
  1076. return this.m_transientItems[sParameterName][sModelItem];
  1077. }
  1078. }
  1079. return null;
  1080. };
  1081. CViewerFragmentTransient.prototype.hasChanged = function(sParameterName, sModelItem)
  1082. {
  1083. var transientItem = this.getTransientItem(sParameterName, sModelItem);
  1084. if(transientItem != null && typeof transientItem.m_bNew != "undefined" && transientItem.m_bNew === true)
  1085. {
  1086. return true;
  1087. }
  1088. else
  1089. {
  1090. return false;
  1091. }
  1092. };
  1093. CViewerFragmentTransient.prototype.getTransientValue = function(sParameterName, sModelItem)
  1094. {
  1095. var sValue = "";
  1096. var transientItem = this.getTransientItem(sParameterName, sModelItem);
  1097. if(transientItem != null && typeof transientItem.m_value != "undefined")
  1098. {
  1099. sValue = transientItem.m_value;
  1100. }
  1101. return sValue;
  1102. };
  1103. CViewerFragmentTransient.prototype.saveTransientSpec = function()
  1104. {
  1105. var sTransientSpec = "<parameters>";
  1106. for(var paramName in this.m_transientItems)
  1107. {
  1108. for(var modelItem in this.m_transientItems[paramName])
  1109. {
  1110. sTransientSpec += "<parameter name=\"" + sXmlEncode(paramName) + "\" modelItem=\"" + sXmlEncode(modelItem) + "\" channel=\"" + sXmlEncode(this.m_transientItems[paramName][modelItem].m_promptChannel) + "\">" + sXmlEncode(this.m_transientItems[paramName][modelItem].m_value) + "</parameter>";
  1111. }
  1112. }
  1113. sTransientSpec += "</parameters>";
  1114. return sTransientSpec;
  1115. };
  1116. CCognosViewerFragment.prototype.createCDictionary = function(oParams)
  1117. {
  1118. var changedParams = new CDictionary();
  1119. for (var key in oParams) {
  1120. changedParams.add(key, oParams[key]);
  1121. }
  1122. return changedParams;
  1123. };