rsPromptParameters.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  1. /*
  2. IBM Confidential
  3. OCO Source Materials
  4. IBM Cognos Products: rs
  5. (C) Copyright IBM Corp. 2017, 2020
  6. The source code for this program is not published or otherwise divested of its trade secrets, irrespective of what has been deposited with the U.S. Copyright Office.
  7. */
  8. define([], function(){
  9. 'use strict';
  10. //F_XMLEncode
  11. function xmlEncode(v_sString) {
  12. // &lt; for <
  13. // &gt; for >
  14. // &amp; for &
  15. // &apos; for ' (required for attribute values delimited by the same character)
  16. // &quot; for " (required for attribute values delimited by the same character)
  17. return v_sString.replace( /&/g, "&amp;" ).replace( /</g, "&lt;" ).replace( />/g, "&gt;" ).replace( /'/g, "&apos;" ).replace( /"/g, "&quot;" );
  18. }
  19. function addClassicViewerPrompts(v_elForm, v_aPromptParameters) {
  20. //Simple prompt values: p_Product = Bear+Edge
  21. for(var i=0; i< v_aPromptParameters.length; i++)
  22. {
  23. var v_oParameter = v_aPromptParameters[i];
  24. if (Array.isArray(v_oParameter.value))
  25. {
  26. for(var j=0; j<v_oParameter.value.length; j++)
  27. {
  28. var v_elInput = v_elForm.appendChild( document.createElement("input") );
  29. v_elInput.type = "hidden";
  30. v_elInput.name = v_oParameter.name;
  31. v_elInput.value = v_oParameter.value[j];
  32. }
  33. }
  34. else
  35. {
  36. var v_elInput = v_elForm.appendChild( document.createElement("input") );
  37. v_elInput.type = "hidden";
  38. v_elInput.name = v_oParameter.name;
  39. v_elInput.value = v_oParameter.value;
  40. }
  41. }
  42. }
  43. function buildSelectOptionXML(v_oValue) {
  44. return "<selectOption useValue=\"" + xmlEncode(v_oValue.use.toString()) + "\"" + (v_oValue.hasOwnProperty("display") ? (" displayValue=\"" + xmlEncode(v_oValue.display.toString()) + "\"") : "") + "/>";
  45. }
  46. function buildBoundRangeXML(v_oValue) {
  47. return "<selectBoundRange>" +
  48. "<start useValue=\"" + xmlEncode(v_oValue.boundRange.start.use.toString()) + "\"" +
  49. (v_oValue.boundRange.start.hasOwnProperty("display") ? (" displayValue=\"" + xmlEncode(v_oValue.boundRange.start.display.toString()) + "\"") : "") + "/>" +
  50. "<end useValue=\"" + xmlEncode(v_oValue.boundRange.end.use.toString()) + "\"" +
  51. (v_oValue.boundRange.end.hasOwnProperty("display") ? (" displayValue=\"" + xmlEncode(v_oValue.boundRange.end.display.toString()) + "\"") : "") + "/>" +
  52. "</selectBoundRange>";
  53. }
  54. function buildUnboundedEndRangeXML(v_oValue) {
  55. return "<selectUnboundedEndRange>" +
  56. "<start useValue=\"" + xmlEncode(v_oValue.unboundedEndRange.start.use.toString()) + "\"" +
  57. (v_oValue.unboundedEndRange.start.hasOwnProperty("display") ? (" displayValue=\"" + xmlEncode(v_oValue.unboundedEndRange.start.display.toString()) + "\"") : "") + "/>" +
  58. "</selectUnboundedEndRange>";
  59. }
  60. function buildUnboundedStartRangeXML(v_oValue) {
  61. return "<selectUnboundedStartRange>" +
  62. "<end useValue=\"" + xmlEncode(v_oValue.unboundedStartRange.end.use.toString()) + "\"" +
  63. (v_oValue.unboundedStartRange.end.hasOwnProperty("display") ? (" displayValue=\"" + xmlEncode(v_oValue.unboundedStartRange.end.display.toString()) + "\"") : "") + "/>" +
  64. "</selectUnboundedStartRange>";
  65. }
  66. function convertPromptValuesToXML(v_aValues) {
  67. var v_sXMLValues = "";
  68. for(var i=0; i<v_aValues.length; i++)
  69. {
  70. var v_oValue = v_aValues[i];
  71. if (v_oValue.hasOwnProperty("use"))
  72. {
  73. v_sXMLValues += buildSelectOptionXML(v_oValue);
  74. }
  75. else if (v_oValue.hasOwnProperty("boundRange"))
  76. {
  77. if (v_oValue.boundRange.start && v_oValue.boundRange.start.hasOwnProperty("use") && v_oValue.boundRange.end && v_oValue.boundRange.end.hasOwnProperty("use"))
  78. {
  79. v_sXMLValues += buildBoundRangeXML(v_oValue);
  80. }
  81. else
  82. {
  83. console.log("rsPromptParameters.convertPromptValuesToXML ... unexpected boundRange format.");
  84. break;
  85. }
  86. }
  87. else if (v_oValue.hasOwnProperty("unboundedEndRange"))
  88. {
  89. if (v_oValue.unboundedEndRange.start && v_oValue.unboundedEndRange.start.hasOwnProperty("use"))
  90. {
  91. v_sXMLValues += buildUnboundedEndRangeXML(v_oValue);
  92. }
  93. else
  94. {
  95. console.log("rsPromptParameters.convertPromptValuesToXML ... unexpected unboundedEndRange format.");
  96. break;
  97. }
  98. }
  99. else if (v_oValue.hasOwnProperty("unboundedStartRange"))
  100. {
  101. if (v_oValue.unboundedStartRange.end && v_oValue.unboundedStartRange.end.hasOwnProperty("use"))
  102. {
  103. v_sXMLValues += buildUnboundedStartRangeXML(v_oValue);
  104. }
  105. else
  106. {
  107. console.log("rsPromptParameters.convertPromptValuesToXML ... unexpected unboundStartRange format.");
  108. break;
  109. }
  110. }
  111. }
  112. return v_sXMLValues;
  113. }
  114. function convertComplexParameterToClassicViewerXML(v_oPromptParametersXML, v_aComplexParameterObject) {
  115. for(var i=0; i< v_aComplexParameterObject.length; i++)
  116. {
  117. var v_oPromptParameter = v_aComplexParameterObject[i];
  118. var v_sName = v_oPromptParameter.name;
  119. var v_aValues = v_oPromptParameter.value;
  120. var v_sValues = convertPromptValuesToXML( Array.isArray(v_aValues) ? v_aValues : [v_aValues]);
  121. if (v_sName && v_sValues)
  122. {
  123. if (!v_oPromptParametersXML[v_sName])
  124. {
  125. v_oPromptParametersXML[v_sName] = [];
  126. }
  127. v_oPromptParametersXML[v_sName].push(v_sValues);
  128. }
  129. }
  130. }
  131. function addClassicViewerPromptsComplex(v_elForm, v_aPromptParametersComplex) {
  132. //Complex json prompt values, e.g.:
  133. // [{"name":"ProductLine","value":[{"use":"Camping Equipment"},{"use":"Outdoor Protection"}]},{"name":"Product","value":[{"use":"BugShield Lotion"}]}]
  134. // [{"name":"ProductLine","value":[{"boundRange":[{"use":"36110","display":"36110"},{"use":"77110","display":"77110"}]}]}]
  135. // [{"name":"UnitPrice","value":[{"unboundedStartRange":{"use":"100","display":"100"}}]}]
  136. var v_oPromptParametersXML = {};
  137. //For each promptParameters passed in from options, parse, convert to XML then store the result in v_oPromptParametersXML
  138. for(var i=0; i<v_aPromptParametersComplex.length; i++)
  139. {
  140. var v_aComplexParameterObject;
  141. try
  142. {
  143. v_aComplexParameterObject = JSON.parse(v_aPromptParametersComplex[i]);
  144. if (!Array.isArray(v_aComplexParameterObject))
  145. {
  146. v_aComplexParameterObject = [v_aComplexParameterObject];
  147. }
  148. }
  149. catch(e)
  150. {
  151. console.log("rsPromptParameters.addClassicViewerPromptsComplex ... invalid promptParameters input : " + v_aPromptParametersComplex[i]);
  152. v_aComplexParameterObject = undefined;
  153. return "";
  154. }
  155. convertComplexParameterToClassicViewerXML(v_oPromptParametersXML, v_aComplexParameterObject);
  156. }
  157. for(var v_sName in v_oPromptParametersXML)
  158. {
  159. if (v_oPromptParametersXML.hasOwnProperty(v_sName))
  160. {
  161. var v_sXMLValues = "";
  162. for(var i=0; i<v_oPromptParametersXML[v_sName].length; i++)
  163. {
  164. v_sXMLValues += v_oPromptParametersXML[v_sName][i];
  165. }
  166. v_sXMLValues = "<selectChoices>" + v_sXMLValues + "</selectChoices>";
  167. var v_elInput = v_elForm.appendChild( document.createElement("input") );
  168. v_elInput.type = "hidden";
  169. v_elInput.name = "p_" + v_sName;
  170. v_elInput.value = v_sXMLValues;
  171. }
  172. }
  173. }
  174. /**
  175. * Convert the value of a parameter into the simple JSON form.
  176. * @param v_oValue The value that is either in SOAP-JSON or simple-JSON form
  177. * @return The simple-JSON representation of v_oValue
  178. */
  179. function valueToSimpleJson( v_oValue ) {
  180. // SOAP JSON has a type property
  181. switch (v_oValue.type) {
  182. case 'simpleParmValueItem':
  183. // soapJson and simpleJson are equivalent except the SOAP form has a few extra bits
  184. delete v_oValue.type;
  185. delete v_oValue.inclusive;
  186. break;
  187. case 'boundRangeParmValueItem':
  188. v_oValue = { boundRange : { start: v_oValue.start, end: v_oValue.end } };
  189. break;
  190. case 'unboundedStartRangeParmValueItem':
  191. v_oValue = { unboundedStartRange : { end: v_oValue.end } };
  192. break;
  193. case 'unboundedEndRangeParmValueItem':
  194. v_oValue = { unboundedEndRange : { start: v_oValue.start } };
  195. break;
  196. default:
  197. // If no type then assume input is already simple JSON
  198. break;
  199. }
  200. return v_oValue;
  201. }
  202. function groupPromptParamters(v_oPromptParameters, v_oPromptParametersComplex) {
  203. //Merge m_aPromptParametersComplex into m_oPromptParameters
  204. // The format of v_oPromptParametersComplex can be just about anything: SOAP JSON, simple JSON, compound JSON.
  205. // compound JSON is an array representation (like SOAP JSON) but where the value uses the simple JSON representation.
  206. // This method must determine what it is and process accordingly.
  207. var v_aPromptParametersComplex;
  208. if (typeof v_oPromptParametersComplex == 'string')
  209. {
  210. try
  211. {
  212. v_oPromptParametersComplex = JSON.parse(v_oPromptParametersComplex);
  213. }
  214. catch(e)
  215. {
  216. console.log("rsPromptParameters.groupPromptParamters ... invalid promptParameters input : " + v_oPromptParametersComplex);
  217. return undefined;
  218. }
  219. }
  220. if (!v_oPromptParameters)
  221. {
  222. v_oPromptParameters = {};
  223. }
  224. if (v_oPromptParametersComplex)
  225. {
  226. if (Array.isArray(v_oPromptParametersComplex))
  227. {
  228. v_aPromptParametersComplex = v_oPromptParametersComplex;
  229. }
  230. else
  231. {
  232. // Check if we have simple JSON or a single compound JSON parameter
  233. // share URL format for some reason represents a single parameter as an object but multiple parameters as an array
  234. if (typeof v_oPromptParametersComplex.name == 'string')
  235. {
  236. // We have an object of the form { name: "text", ...} which is not the simple JSON form
  237. // turn it into an array for further processing
  238. v_aPromptParametersComplex = [v_oPromptParametersComplex];
  239. }
  240. else
  241. {
  242. // We have simple JSON, merge it into v_oPromptParameters
  243. Object.keys(v_oPromptParametersComplex).forEach( function(key) {
  244. v_oPromptParameters[key] = v_oPromptParametersComplex[key];
  245. } );
  246. }
  247. }
  248. }
  249. for (var i = 0; v_aPromptParametersComplex && i < v_aPromptParametersComplex.length; ++i)
  250. {
  251. var v_aPromptParametersComplexObject;
  252. try
  253. {
  254. v_aPromptParametersComplexObject = typeof v_aPromptParametersComplex[i] == 'string' ? JSON.parse(v_aPromptParametersComplex[i]) : v_aPromptParametersComplex[i];
  255. if (!Array.isArray(v_aPromptParametersComplexObject))
  256. {
  257. v_aPromptParametersComplexObject = [v_aPromptParametersComplexObject];
  258. }
  259. }
  260. catch(e)
  261. {
  262. console.log("rsPromptParameters.groupPromptParamters ... invalid promptParameters input : " + v_aPromptParametersComplex[i]);
  263. return undefined;
  264. }
  265. for(var j=0; j<v_aPromptParametersComplexObject.length; j++)
  266. {
  267. // We could have either a SOAP JSON parameter value or a compound JSON parameter value
  268. var v_oPromptParameter = v_aPromptParametersComplexObject[j];
  269. var v_sName = v_oPromptParameter.name;
  270. var v_aValues = [];
  271. if (v_oPromptParameter.value)
  272. {
  273. v_aValues = (Array.isArray(v_oPromptParameter.value) || typeof v_oPromptParameter.value.length == "number") ? v_oPromptParameter.value : [v_oPromptParameter.value];
  274. }
  275. if (v_sName && v_aValues)
  276. {
  277. if (!v_oPromptParameters[v_sName])
  278. {
  279. v_oPromptParameters[v_sName] = [];
  280. }
  281. // It is valid for the value array to be empty
  282. for (var k = 0; k < v_aValues.length; ++k)
  283. {
  284. var v_oValue = valueToSimpleJson(v_aValues[k]);
  285. if (v_oValue.hasOwnProperty("use"))
  286. {
  287. v_oPromptParameters[v_sName].push({use: v_oValue.use, display: (v_oValue.hasOwnProperty("display") ? v_oValue.display : v_oValue.use)});
  288. }
  289. if (v_oValue.hasOwnProperty("boundRange"))
  290. {
  291. if (v_oValue.boundRange.start && v_oValue.boundRange.start.hasOwnProperty("use") && v_oValue.boundRange.end && v_oValue.boundRange.end.hasOwnProperty("use"))
  292. {
  293. v_oPromptParameters[v_sName].push({
  294. boundRange: {
  295. start : { use: v_oValue.boundRange.start.use, display: (v_oValue.boundRange.start.hasOwnProperty("display") ? v_oValue.boundRange.start.display : v_oValue.boundRange.start.use) },
  296. end : { use: v_oValue.boundRange.end.use, display: (v_oValue.boundRange.end.hasOwnProperty("display") ? v_oValue.boundRange.end.display : v_oValue.boundRange.end.use) }
  297. }
  298. });
  299. }
  300. else
  301. {
  302. console.log("rsPromptParameters.groupPromptParamters ... unexpected boundRange format");
  303. }
  304. }
  305. else if (v_oValue.hasOwnProperty("unboundedEndRange"))
  306. {
  307. if (v_oValue.unboundedEndRange.start && v_oValue.unboundedEndRange.start.hasOwnProperty("use"))
  308. {
  309. v_oPromptParameters[v_sName].push({
  310. unboundedEndRange: {
  311. start : {
  312. use: v_oValue.unboundedEndRange.start.use,
  313. display: (v_oValue.unboundedEndRange.start.hasOwnProperty("display") ? v_oValue.unboundedEndRange.start.display : v_oValue.unboundedEndRange.start.use)
  314. }
  315. }
  316. });
  317. }
  318. else
  319. {
  320. console.log("rsPromptParameters.groupPromptParamters ... unexpected unboundedEndRange format.");
  321. }
  322. }
  323. else if (v_oValue.hasOwnProperty("unboundedStartRange"))
  324. {
  325. if (v_oValue.unboundedStartRange.end && v_oValue.unboundedStartRange.end.hasOwnProperty("use"))
  326. {
  327. v_oPromptParameters[v_sName].push({
  328. unboundedStartRange: {
  329. end : {
  330. use: v_oValue.unboundedStartRange.end.use,
  331. display: (v_oValue.unboundedStartRange.end.hasOwnProperty("display") ? v_oValue.unboundedStartRange.end.display : v_oValue.unboundedStartRange.end.use)
  332. }
  333. }
  334. });
  335. }
  336. else
  337. {
  338. console.log("rsPromptParameters.groupPromptParamters ... unexpected unboundedStartRange format.");
  339. }
  340. }
  341. }
  342. }
  343. }
  344. }
  345. return v_oPromptParameters;
  346. }
  347. function emitValue( v_sTtype, v_oValue ) {
  348. var v_aValue = [];
  349. if (v_oValue !== undefined) { // test for actual undefined
  350. v_aValue.push( "<bus:");
  351. v_aValue.push( v_sTtype );
  352. v_aValue.push( " xsi:type=\"xsd:string\"" );
  353. if (v_oValue === null) { // test for actual null
  354. v_aValue.push( " xsi:nil=\"true\"/>" );
  355. }
  356. else {
  357. v_aValue.push( ">" );
  358. v_aValue.push( xmlEncode(v_oValue.toString()));
  359. v_aValue.push( "</bus:" );
  360. v_aValue.push( v_sTtype );
  361. v_aValue.push( ">" );
  362. }
  363. }
  364. return v_aValue.join("");
  365. }
  366. function emitUseDisplay( v_oValue ) {
  367. return emitValue( "use", v_oValue.use ) + emitValue( "display", v_oValue.display );
  368. }
  369. function buildSimpleParmValue(v_oValue) {
  370. return "<item xsi:type=\"bus:simpleParmValueItem\">" +
  371. "<bus:inclusive xsi:type=\"xsd:boolean\">true</bus:inclusive>" +
  372. emitUseDisplay( v_oValue ) +
  373. "</item>";
  374. }
  375. function buildBoundRangeParmValue(v_oValue) {
  376. return "<item xsi:type=\"bus:boundRangeParmValueItem\">" +
  377. "<bus:inclusive xsi:type=\"xs:boolean\">true</bus:inclusive>" +
  378. "<bus:start xsi:type=\"bus:simpleParmValueItem\">" +
  379. "<bus:inclusive xsi:type=\"xs:boolean\">true</bus:inclusive>" +
  380. emitUseDisplay( v_oValue.boundRange.start ) +
  381. "</bus:start>" +
  382. "<bus:end xsi:type=\"bus:simpleParmValueItem\">" +
  383. "<bus:inclusive xsi:type=\"xs:boolean\">true</bus:inclusive>" +
  384. emitUseDisplay( v_oValue.boundRange.end ) +
  385. "</bus:end>" +
  386. "</item>";
  387. }
  388. function buildUnboundedEndRangeParmValue(v_oValue) {
  389. return "<item xsi:type=\"bus:unboundedEndRangeParmValueItem\">" +
  390. "<bus:inclusive xsi:type=\"xs:boolean\">true</bus:inclusive>" +
  391. "<bus:start xsi:type=\"bus:simpleParmValueItem\">" +
  392. "<bus:inclusive xsi:type=\"xs:boolean\">true</bus:inclusive>" +
  393. emitUseDisplay( v_oValue.unboundedEndRange.start ) +
  394. "</bus:start>" +
  395. "</item>";
  396. }
  397. function buildUnboundedStartRangeParmValue(v_oValue) {
  398. return "<item xsi:type=\"bus:unboundedStartRangeParmValueItem\">" +
  399. "<bus:inclusive xsi:type=\"xs:boolean\">true</bus:inclusive>" +
  400. "<bus:end xsi:type=\"bus:simpleParmValueItem\">" +
  401. "<bus:inclusive xsi:type=\"xs:boolean\">true</bus:inclusive>" +
  402. emitUseDisplay( v_oValue.unboundedStartRange.end ) +
  403. "</bus:end>" +
  404. "</item>";
  405. }
  406. function buildBusParameterValues(v_oPromptParameters, v_oPromptParametersComplex, v_sParamsTagName) {
  407. var v_sParameterValues = "<bus:" + (v_sParamsTagName || "parameterValues") + " xmlns:bus=\"http://developer.cognos.com/schemas/bibus/3/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" +
  408. " xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" SOAP-ENC:arrayType=\"bus:parameterValue[]\" xsi:type=\"SOAP-ENC:Array\">";
  409. var v_oPromptParameters = groupPromptParamters(v_oPromptParameters, v_oPromptParametersComplex);
  410. for(var v_sName in v_oPromptParameters)
  411. {
  412. if (v_oPromptParameters.hasOwnProperty(v_sName))
  413. {
  414. v_sParameterValues += "<item xsi:type=\"bus:parameterValue\">";
  415. v_sParameterValues += "<bus:name xsi:type=\"xsd:string\">" + xmlEncode(v_sName) + "</bus:name>";
  416. v_sParameterValues += "<bus:value xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"bus:parmValueItem[]\">";
  417. var v_aCurParams = v_oPromptParameters[v_sName];
  418. var v_iCurParamsLen = v_aCurParams.length;
  419. for(var i = 0; i < v_iCurParamsLen; i++)
  420. {
  421. var v_oValue = v_aCurParams[i];
  422. if (v_oValue.hasOwnProperty("use"))
  423. {
  424. v_sParameterValues += buildSimpleParmValue(v_oValue);
  425. }
  426. else if (v_oValue.hasOwnProperty("boundRange"))
  427. {
  428. v_sParameterValues += buildBoundRangeParmValue(v_oValue);
  429. }
  430. else if (v_oValue.hasOwnProperty("unboundedEndRange"))
  431. {
  432. v_sParameterValues += buildUnboundedEndRangeParmValue(v_oValue);
  433. }
  434. else if (v_oValue.hasOwnProperty("unboundedStartRange"))
  435. {
  436. v_sParameterValues += buildUnboundedStartRangeParmValue(v_oValue);
  437. }
  438. }
  439. v_sParameterValues += "</bus:value>";
  440. v_sParameterValues += "</item>";
  441. }
  442. }
  443. v_sParameterValues += "</bus:" + (v_sParamsTagName || "parameterValues") + ">";
  444. return v_sParameterValues;
  445. }
  446. function convertValueToBoundedRangeFormat(v_oValue) {
  447. v_oValue.boundRange = {start: {use: v_oValue.start.use, display: v_oValue.start.display},
  448. end: {use: v_oValue.end.use, display: v_oValue.end.display}};
  449. delete v_oValue.start;
  450. delete v_oValue.end;
  451. }
  452. function convertValueToUnboundedStartRangeFormat(v_oValue) {
  453. v_oValue.unboundedStartRange = {end: {use: v_oValue.end.use, display: v_oValue.end.display}};
  454. delete v_oValue.end;
  455. }
  456. function convertValueToUnboundedEndRangeFormat(v_oValue) {
  457. v_oValue.unboundedEndRange = {start: {use: v_oValue.start.use, display: v_oValue.start.display}};
  458. delete v_oValue.start;
  459. }
  460. return {
  461. //classicviewer perspective prompt parameter builder
  462. cvAddPromptParameters : function(v_elForm, v_aPromptParameters, v_aPromptParametersComplex) {
  463. console.log("rsPromptParameters.cvAddPromptParameters ...");
  464. addClassicViewerPrompts(v_elForm, v_aPromptParameters);
  465. addClassicViewerPromptsComplex(v_elForm, v_aPromptParametersComplex);
  466. },
  467. //authoring perspective prompt parameter builder
  468. rsBuildPromptParameters : function(v_oPromptParameters, v_oPromptParametersComplex, v_sParamsTagName) {
  469. //console.log("rsPromptParameters.rsBuildPromptParameters ...");
  470. if (v_oPromptParameters || v_oPromptParametersComplex)
  471. {
  472. return buildBusParameterValues(v_oPromptParameters, v_oPromptParametersComplex, v_sParamsTagName);
  473. }
  474. else
  475. {
  476. return "";
  477. }
  478. },
  479. //prompt parameters url builder
  480. //Expecting v_oPromptParameters input as object only
  481. rsBuildParameterUrl : function(v_oUrlMap, v_oPromptParameters) {
  482. var v_aPromptParameters = Array.isArray(v_oPromptParameters) ? v_oPromptParameters : [v_oPromptParameters];
  483. v_aPromptParameters.forEach( function(v_oPara) {
  484. if (typeof v_oPara !== 'undefined') {
  485. var v_aValues = Array.isArray(v_oPara.value) ? v_oPara.value : [v_oPara.value];
  486. v_aValues.forEach( function(v_oValue) {
  487. switch(v_oValue.type) {
  488. case "boundRangeParmValueItem":
  489. convertValueToBoundedRangeFormat(v_oValue);
  490. break;
  491. case "unboundedStartRangeParmValueItem":
  492. convertValueToUnboundedStartRangeFormat(v_oValue);
  493. break;
  494. case "unboundedEndRangeParmValueItem":
  495. convertValueToUnboundedEndRangeFormat(v_oValue);
  496. break;
  497. default:
  498. break;
  499. }
  500. delete v_oValue.type;
  501. delete v_oValue.inclusive;
  502. });
  503. }
  504. });
  505. v_oUrlMap.promptParameters = !!v_oPromptParameters ? JSON.stringify(v_aPromptParameters) : null;
  506. },
  507. /**
  508. * Convert the array representation of parameter values into an object representation of parameter values.
  509. * @param v_aParameters
  510. * @returns An object with parameters as members or empty object if there are none
  511. */
  512. convertParameterArrayToObject : function(v_aParameters) {
  513. var v_oParameters = {};
  514. if (v_aParameters && v_aParameters.length > 0) {
  515. v_aParameters.forEach( function(v_oParameter) {
  516. if (v_oParameter && v_oParameter.name) {
  517. v_oParameters[v_oParameter.name] = v_oParameter.value;
  518. }
  519. });
  520. }
  521. return v_oParameters;
  522. }
  523. };
  524. });