How to hide certain choices based on logged in users' department

Rob Sestito
Mega Sage

Hey there SN Comm Team,

I am in need of some help to hide certain choices from a custom field when the logged in user does not belong to the Human Resources Department.

The field and choices are on the HRIT Operations table

Department field sits on the user table (sys_user)

I also need to hide these choices on the portal side. The variable I am using is a reference type. Using a reference qualifier to reference the choices so that I did not have to duplicate all the choices (there are 37).

I believe I have to use both Script Include with Ajax and a Client Script, but having difficulty scripting it.

Can someone lend me a hand and show me the way 🙂

Thank you in advance,

-Rob

 

1 ACCEPTED SOLUTION

Mahendra RC
Mega Sage

Hello Rob,

If your requirement is to use a drop down field then I would suggest not to use the reference type field. You can use the Select box type (choice type) field which is a best practice, because if you have a requirement to create UI policy on this field or Hide other fields based on this field value if future, then it will be difficult for you or team to implement the UI Policy because the reference qualifier will not be applicable on condition field in UI policy table. So you we end up having 100s of value for your field when creating UI Policy.


If you are using the Select box type field then you can use the below code:

function onLoad() {
    var ga = new GlideAjax("DepartmentUtilsCustom");
    ga.addParam('sysparm_name', 'isUserFromHrDepartment');
    ga.getXMLAnswer(getResources);

    function getResources(response) {
        var answer = response;
        alert(answer);
        if (!answer || answer == "false") {
                var removeOptions = ["value1", "value2", "value3"]; // you can add the drop-down choice field value that you want to remove
                for (var optionValues in removeOptions) {
                        g_form.removeOption("<YOUR_FIELD_NAME>", removeOptions[optionValues]);
                }
        }
    }
}

Create a System property:
Name: hr.department.sys_id
Value: <sys_id of human resource department in your instance>

Script include:

var DepartmentUtilsCustom = Class.create();
DepartmentUtilsCustom.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	isUserFromHrDepartment: function () {
		// As the department of logged in user will not change frequently we can get the Department ID of logged user from user's current session
		return (gs.getUser().getDepartmentID() == gs.getProperty("hr.department.sys_id"));
	},

    type: 'DepartmentUtilsCustom'
});

Please mark my respsone as helpful/correct, if it answer your question.

Thanks

 

View solution in original post

27 REPLIES 27

Hello Mohith,

Thanks for responding -

I want to make sure I am following correctly: on the backend I have a field created on the HRIT Operations table called 'Elevated WD Access  Request Types', and this field is holding all the choices.

On my record producer for the portal, my field is as follows:

find_real_file.png

For your reference qualifier you are referring to, would I need to add it here? OR, does it go back on the field I created on the HRIT Ops table?

Appreciate your feedback - @Mohith Devatte 

Thank you,

-Rob

@Rob Sestito  if this should happen on the catalog item you need to add the reference qualifier in the variable that you have in catalog item  which you mentioned as a reference field  fr sys_choice table 

 

Hey @Mohith Devatte -  

My custom field on the HRIT Ops table that has all the choices is a choice field - and my variable on the record producer, as see in my above screenshot, is referencing the choices through the ref qual.

So, that is why I am asking where your ref qual would need to go. Could this go on the record producer variable field for the portal, or, do I need to change my custom field on the HRIT Ops table?

Thank you so much!

-Rob

@Rob Sestito so i think you must have mapped this record producer variable to your custom field HRIT ops table .

so i would say go with record producer variable and when submission of the form map it to custom field 

 

@Mohith Devatte

Gotcha - so I have the ref qual as this now with including yours (I think this is the wrong way but please let me know):

name=sn_hr_core_case_operations^element=u_elevated_wd_access_request_types^inactive=false^ORDERBYsequence^javascript:new getChoices().getChoiceForNonHR();