Reference Qualifier to filter locations based on User Location

mattfollowell
Tera Expert

I have a variable on a catalogue item that references the locations table. I want that variable to only list locations whose parent = the signed in user's location. EXCEPT if the signed in User's location = MG. If the signed in user's location is MG then I want the variable to list all locations on the table.

function advloc() {
var locPar;
var userLoc='';
var gr=new GlideRecord('sys_user');
gr.addQuery('sys_id',gs.getUserID());
gr.query();
    while(gr.next()){
        userLoc=gr.location;
    }
    if(userLoc.includes("MG")){
        locPar = "";
    }
    else {
        locPar = "parent = userLoc";
    }
return locPar
}

I think it is not working because it returns the name of the location and not the Sys_Id, but I'm not 100%.

1 ACCEPTED SOLUTION

You're on the right track. That script belongs in a script include that is client callable:

And in your reference qualifier you would just do:

new getLocation().locations();

View solution in original post

39 REPLIES 39

Mark Roethof
Tera Patron
Tera Patron

Hi there,

Several things  to look at:

gr.location
> is a sys_id
userLoc.includes("MG") 
> Checks for a string, not a sys_id
> Not sure, though I don't think includes work. Use indexOf('MG') > -1 instead
>>> Do note: this checks if it contains MG. So what if there is a location "AMG"... not what your where after, though still matches. So a small bug here to fix!

Maybe more, though start with this.

If my answer helped you in any way, please then mark it as helpful.

Kind regards,
Mark
2020 ServiceNow Community MVP
2020 ServiceNow Developer MVP

---

LinkedIn
Community article list

 

Kind regards,

 

Mark Roethof

Independent ServiceNow Consultant

10x ServiceNow MVP

---

 

~444 Articles, Blogs, Videos, Podcasts, Share projects - Experiences from the field

LinkedIn

I would try the following script:

function advloc() {
    var locPar;
    var userLoc = '';
    var gr = new GlideRecord('sys_user');
    gr.addQuery('sys_id', gs.getUserID());
    gr.query();
    if (gr.next()) {
        userLoc = gr.location + "";
    }

    if (userLoc.indexOf("MG") == -1) {
        locPar = "";
    } else {
        locPar = "parent=" + userLoc;
    }
    return locPar
}

Elijah Aromola
Mega Sage

I would try the following script:

function advloc() {
    var locPar;
    var userLoc = '';
    var gr = new GlideRecord('sys_user');
    gr.addQuery('sys_id', gs.getUserID());
    gr.query();
    if (gr.next()) {
        userLoc = gr.location + "";
    }

    if (userLoc.indexOf("MG") == -1) {
        locPar = "";
    } else {
        locPar = "parent=" + userLoc;
    }
    return locPar
}

This points me in the right direction, but doesn't work as an advanced reference qualifier for the variable.. I might need to rethink the way I am doing this.