BusinessProcessAction.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. /*
  2. *+------------------------------------------------------------------------+
  3. *| Licensed Materials - Property of IBM
  4. *| IBM Cognos Products: Viewer
  5. *| (C) Copyright IBM Corp. 2001, 2012
  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 BusinessProcessAction() {};
  13. BusinessProcessAction.prototype = new CognosViewerAction();
  14. BusinessProcessAction.prototype.updateMenu = function( jsonSpec ) {
  15. var sBpmRestURI = this.getCognosViewer().envParams['bpmRestURI'];
  16. jsonSpec.visible = ( sBpmRestURI ? true : false );
  17. if(jsonSpec.visible) {
  18. jsonSpec.disabled = !this._hasAnyContextInSelectedObjects();
  19. }
  20. return jsonSpec;
  21. };
  22. BusinessProcessAction.prototype._initBPMGateway = function() {
  23. var cognosViewer = this.getCognosViewer();
  24. this.m_BPMGateway = cognosViewer.envParams['bpmRestURI'];
  25. var length = this.m_BPMGateway.length;
  26. if( this.m_BPMGateway[length-1] !== '/') {
  27. this.m_BPMGateway += '/';
  28. }
  29. };
  30. BusinessProcessAction.prototype.execute = function() {
  31. this._initBPMGateway();
  32. var oProcesses = this._getBPMProcesses();
  33. };
  34. BusinessProcessAction.prototype._getBPMProcesses = function() {
  35. var callbacks = {
  36. complete : { object : this, method : this.handleGetBPMProcessSuccess },
  37. fault : { object : this, method : this.handleGetBPMProcessFail }
  38. };
  39. var url = this.m_BPMGateway + 'exposed/process';
  40. var request = this._createBPMServerRequest( 'GET', callbacks, url );
  41. request.sendRequest();
  42. };
  43. BusinessProcessAction.prototype._createBPMServerRequest = function( action, callbacks, url, aFormFields ) {
  44. var xmlHttpObj = new XmlHttpObject();
  45. xmlHttpObj.init( action, this._rewriteURL(url) );
  46. xmlHttpObj.setCallbacks( callbacks );
  47. xmlHttpObj.setHeaders({ Accept : "application/json"} );
  48. if( aFormFields ) {
  49. for( var i in aFormFields ){
  50. xmlHttpObj.addFormField(aFormFields[i].name, aFormFields[i].value);
  51. }
  52. }
  53. return xmlHttpObj;
  54. };
  55. BusinessProcessAction.prototype._rewriteURL = function( url ) {
  56. if( bux && bux.iwidget && bux.iwidget.canvas && bux.iwidget.canvas.Helper && bux.iwidget.canvas.Helper.rewriteUrl )
  57. {
  58. return bux.iwidget.canvas.Helper.rewriteUrl( url );
  59. }
  60. return url;
  61. };
  62. BusinessProcessAction.prototype.handleGetBPMProcessFail = function( serverResponse ) {
  63. var sErrorMsg = RV_RES.IDS_JS_BUSINESS_PROCESS_GET_PROCESSES_FAIL_MSG;
  64. var sErrorDetails = serverResponse.getResponseText();
  65. this._showErrorMessage( sErrorMsg, sErrorDetails );
  66. };
  67. BusinessProcessAction.prototype.handleGetBPMProcessSuccess = function( serverResponse ) {
  68. var response = serverResponse.getResponseText();
  69. if( !response )
  70. {
  71. return;
  72. }
  73. var jsonResponse = dojo.fromJson( response );
  74. var oBusinessProcessesInfo = this._getBusinessProcessesInfo( jsonResponse.data.exposedItemsList );
  75. this._showDialog( oBusinessProcessesInfo );
  76. };
  77. BusinessProcessAction.prototype._getBusinessProcessesInfo = function( exposedItemsList ) {
  78. if( !exposedItemsList ){
  79. return;
  80. }
  81. var noOfItems = exposedItemsList.length;
  82. var bpmProcessInfo = new Array();
  83. var bmpProcessUniqueNamesMap = {};
  84. for( var i = 0; i < noOfItems; i++ ) {
  85. var sProcessDisplayName = exposedItemsList[i].display;
  86. var sProcessItemID = exposedItemsList[i].itemID;
  87. var sProcessAppID = exposedItemsList[i].processAppID;
  88. if( sProcessDisplayName && !bmpProcessUniqueNamesMap[sProcessDisplayName] && sProcessItemID && sProcessAppID ) {
  89. bmpProcessUniqueNamesMap[sProcessDisplayName] = true;
  90. bpmProcessInfo.push( { sCaption : sProcessDisplayName,
  91. sBPD_ID : sProcessItemID,
  92. sProcessAppID : sProcessAppID } );
  93. }
  94. };
  95. return bpmProcessInfo;
  96. };
  97. BusinessProcessAction.prototype._showDialog = function( oBPMProcessInfo ) {
  98. var oBPAction = this;
  99. var oSelectBusinessProcessDialog = new viewer.dialogs.SelectBusinessProcess( {
  100. sTitle : RV_RES.IDS_JS_BUSINESS_PROCESS_SELECT_DIALOG_TITLE,
  101. sLabel : RV_RES.IDS_JS_BUSINESS_PROCESS_SELECT_DIALOG_DESC,
  102. okHandler : function() {},
  103. cancelHandler : function() {},
  104. BPMProcessesInfo : oBPMProcessInfo,
  105. bpAction : oBPAction
  106. });
  107. oSelectBusinessProcessDialog.startup();
  108. oSelectBusinessProcessDialog.show();
  109. };
  110. /**
  111. * This function gets the selection context and generates the process input parameter
  112. * (much like the drill thru parameters)
  113. *
  114. * Should be in the format:
  115. * { CognosParameter : { ... } }
  116. */
  117. BusinessProcessAction.prototype.getInputParameter = function( bValueAsString ) {
  118. var obj = null;
  119. var cognosViewer = this.getCognosViewer();
  120. var oSectionController = cognosViewer.getSelectionController();
  121. var aJsonContexts = oSectionController.getSelectedObjectsJsonContext();
  122. if (aJsonContexts) {
  123. var value = aJsonContexts;
  124. if( bValueAsString )
  125. {
  126. value = dojo.toJson( value );
  127. }
  128. obj = {"cognosParameter": value};
  129. }
  130. return obj;
  131. }
  132. BusinessProcessAction.prototype.startProcess = function( sBPD_Id, sProcessAppId, sProcessName ) {
  133. var callbacks = {
  134. customArguments: [ sProcessName ],
  135. complete : { object : this, method : this.handleGetStartProcessSuccessResponse },
  136. fault : { object : this, method : this.handleGetStartProcessFailResponse }
  137. };
  138. var url = this.m_BPMGateway + 'process';
  139. var oFormFields = new Array();
  140. oFormFields.push( {name : 'action', value : 'start'} );
  141. oFormFields.push( {name : 'parts', value : 'data'} );
  142. if( sBPD_Id ) {
  143. oFormFields.push( {name : 'bpdId', value : sBPD_Id});
  144. }
  145. if( sProcessAppId ) {
  146. oFormFields.push( {name : 'processAppId', value : sProcessAppId} );
  147. }
  148. var oParam = this.getInputParameter(true /*value as string */);
  149. if( oParam ) {
  150. oFormFields.push( {name : 'params', value : dojo.toJson(oParam) } );
  151. }
  152. var request = this._createBPMServerRequest( 'POST', callbacks, url, oFormFields );
  153. request.sendRequest();
  154. };
  155. BusinessProcessAction.prototype.handleGetStartProcessSuccessResponse = function( serverResponse, sProcessName ) {
  156. var response = serverResponse.getResponseText();
  157. if( response ) {
  158. var jsonResponse = dojo.fromJson( response );
  159. if( jsonResponse.status === "200" ) {
  160. var sMsg = CViewerCommon.getMessage(RV_RES.IDS_JS_BUSINESS_PROCESS_START_PROCESS_SUCCEED_MSG, sProcessName );
  161. var oInfoMsgDialog = new ModalInfoMessageDialog({
  162. sTitle : RV_RES.IDS_JS_BUSINESS_PROCESS_START_PROCESS_SUCCEED_MSG_TITLE,
  163. sMessage : sMsg,
  164. sDescription : RV_RES.IDS_JS_BUSINESS_PROCESS_START_PROCESS_SUCCEED_MSG_DETAIL
  165. });
  166. oInfoMsgDialog.show();
  167. }
  168. }
  169. };
  170. BusinessProcessAction.prototype.handleGetStartProcessFailResponse = function( serverResponse, sProcessName ) {
  171. var response = serverResponse.getResponseXml();
  172. if( response && response.documentElement )
  173. {
  174. this._handleXMLErrorResponse( response, sProcessName );
  175. return;
  176. }
  177. var sErrorMsg = CViewerCommon.getMessage( RV_RES.IDS_JS_BUSINESS_PROCESS_START_PROCESS_FAILED_MSG, sProcessName );
  178. var sErrorDetails = serverResponse.getResponseText();
  179. try{
  180. var jsonResponse = dojo.fromJson( sErrorDetails );
  181. sErrorDetails = jsonResponse.Data.errorMessage;
  182. } catch(err) {/*swallow exception*/}
  183. this._showErrorMessage( sErrorMsg, sErrorDetails );
  184. };
  185. BusinessProcessAction.prototype._handleXMLErrorResponse = function( xmlError, sProcessName ) {
  186. var eError = XMLHelper_FindChildrenByTagName( xmlError, "error" );
  187. var sErrorMessage = "";
  188. var sErrorDetails = "";
  189. if( eError ) {
  190. sErrorMessage = XMLHelper_FindChildrenByTagName( eError, "message" ).childNodes[0].nodeValue;
  191. sErrorDetails = XMLHelper_FindChildrenByTagName( eError, "detail" ).childNodes[0].nodeValue;
  192. }
  193. else
  194. {
  195. sErrorMessage = CViewerCommon.getMessage( RV_RES.IDS_JS_BUSINESS_PROCESS_START_PROCESS_FAILED_MSG, sProcessName);
  196. }
  197. this._showErrorMessage( sErrorMessage, sErrorDetails );
  198. };
  199. BusinessProcessAction.prototype._showErrorMessage = function( sErrorMsg, sErrorDetails ) {
  200. var errorDialog = new ModalFaultMessageDialog( sErrorMsg, sErrorDetails );
  201. errorDialog.show();
  202. };
  203. BusinessProcessAction.prototype._hasAnyContextInSelectedObjects = function() {
  204. var foundCtx = false;
  205. var oSectionController = this.m_oCV.getSelectionController();
  206. var aSelectedObjects = oSectionController.getAllSelectedObjects();
  207. for( var i=0; i<aSelectedObjects.length; i++) {
  208. var aCtxIds = aSelectedObjects[i].getSelectedContextIds();
  209. if (aCtxIds && aCtxIds.length>0) {
  210. foundCtx= true;
  211. break;
  212. }
  213. }
  214. return foundCtx;
  215. };