Workaround to use action.setRedirectURL in Portal UI action
Import
·
Nov 29, 2018
·
article
Hi all,
At least for Jakarta action.setRedirectURL(url) doesn't work in the Portal .
Here is my workaround.
It adds extra function call before action.setRedirectURL(url) + a code to get data in portal form.
new UserPreferences().setUrlToOpen(url);
action.setRedirectURL(url);
Line 90 of Form widget - add additional function call after last then to get
loadForm($scope.data.table, sysID).then(constructResponseHandler(response)) .then(redirectFix);
function redirectFix(){
ctrl.data.action = "checkRedirect"
ctrl.server.update().then(function(response){
if(response.forceRedirectTo){
$window.location = (response.forceRedirectTo);
} else {
ctrl.data.action = ""
}
})
}
Server side action is:
if(input.action === "checkRedirect"){
var urlToOpen = new UserPreferences().getUrlToOpen();
if(urlToOpen){
data.forceRedirectTo = urlToOpen;
}
return;
}
I save temp values to user preferences, but in your case in could be better to place temp data to user session.
var UserPreferences = Class.create();
UserPreferences.prototype = {
initialize: function() {
this.urlPref = "fix.redirectAction.url";
this.urlPrefTimer = "fix.redirectAction.url.timer";
},
/*
save url. use to fix action.setRedirect for the Portal
*/
setUrlToOpen:function(url){
gs.getUser().savePreference(this.urlPref, url);
gs.getUser().savePreference(this.urlPrefTimer, new Date().getTime());
},
/*
When to url or it is older then 1 minute - returns empty string
*/
getUrlToOpen: function(){
var url = "";
var old = gs.getUser().getPreference(this.urlPrefTimer);
var outDated = (new Date().getTime() - old ) /1000 > 60;
if(!outDated) {
url = gs.getUser().getPreference(this.urlPref);
}
return url;
},
type: 'UserPreferences'
};
View original source
https://www.servicenow.com/community/developer-articles/workaround-to-use-action-setredirecturl-in-portal-ui-action/ta-p/2303837