logo

NJP

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