docway.Transfer.requestContentOperation = function(oObject, sCmd, sFormat, nPage, sPageModifier, oWindow) { //we used to "defer" the content operation here, and hit the UI to get tickets and an ajax payload. //now we do everything inline, because reentrant setTimeout blows everything up if (wsptIsNull(docway.TransferManager.getSharedControl())) { if (docway.TransferManager.MustHaveControl) { wspt.alertWarning("${transfer.js.operationdisallowed}"); return; } oTransfer = new docway.BrowserTransfer(); } else { oTransfer = new docway.Transfer(); } //do all ticket-getting right here, because we need a centralized spot //to piggy-back onto the request var oRequestedOperation = { sCmd:sCmd ,sFormat:sFormat ,nPage:nPage ,sPageModifier:sPageModifier }; var requestParams = {} Ext.applyIf(requestParams, oTransfer.prepareContentOperationHook(oObject, oRequestedOperation)); Ext.applyIf(requestParams, oTransfer.prepareContentOperation(oObject, oRequestedOperation)); //if (requestParams.keys.length === 0) return; //execute var url = wspt.getDhtmlClient().getDynamicResourceRoot() + 'raw/'; var qs = wspt.getDhtmlClient().createQueryString(); for (var key in requestParams) { qs.add(key, requestParams[key]); } var sJson = wspt.getDhtmlClient().executeSynchronousRequest('dwuiOverrideContentOperation', url, qs); if (wsptIsNull(sJson)) { throw new Error('${transfer.js.getticketfailed}'); //where does this get caught } var oResponse = Ext.util.JSON.decode(sJson); //fix up oObject--which might need a full-blown ajax component stack to reproject oTransfer.executeContentOperation(oObject, oResponse, oWindow); }; docway.Transfer.prototype.prepareContentOperationHook = function(oObject, op) //signal that content operation should be deferred, so the UI has a chance //to intercept and override how the operation happens //they can also modify the operation inline right here { //return request parameters to be added to query if (docway.CONTENTOPERATION_VIEW === op.sCmd) { //give UI a chance to override view operations op.sSystemID = oObject.getID(); return op; //{ overrideRequest:true }; } return null; }; docway.Transfer.prototype.prepareContentOperation = function(oObject, op) { //all control-based transfer operations except CancelCheckout need a ticket if (docway.CONTENTOPERATION_CANCELCHECKOUT !== op.sCmd) { return { needTicket: true }; } return null; } docway.BrowserTransfer.prototype.prepareContentOperation = function(oObject, op) { //which browser-based operations need a ticket? if (docway.CONTENTOPERATION_CANCELCHECKOUT !== op.sCmd) { return { needTicket: true }; } return null; } docway.Transfer.prototype.executeContentOperation = function(oObject, oResponse, oWindow) { var op = oResponse.oActualOperation; var oTicket = oResponse.oTicket; try { switch (op.sCmd) { case docway.CONTENTOPERATION_VIEW: this.view(oObject, oTicket, oWindow); break; case docway.CONTENTOPERATION_VIEWRENDITION: this.viewRendition(oObject, oTicket, op.sFormat, op.nPage, op.sPageModifier, oWindow); break; case docway.CONTENTOPERATION_EDIT: this.edit(oObject, oTicket, oWindow); break; case docway.CONTENTOPERATION_EXPORT: this.exportContent(oObject, oWindow); break; case docway.CONTENTOPERATION_CHECKOUT: this.checkout(oObject, oTicket, oWindow); break; case docway.CONTENTOPERATION_CANCELCHECKOUT: this.cancelCheckout(oObject); break; default: throw new Error(wspt.formatString('${transfer.js.executecontentop}', [ op.sCmd ])); } } catch (e) { if(wspt.getDhtmlClient().getDisableExceptionLogging()) { throw e; } wspt.alertError(wsptGetErrorMessage(e)); } };