Auto populate user details based on a question

CarolMa6
Tera Expert

Hi, 

Some help please not sure what am i missing here either of the user details are not populating at all. 

 

These are the variables i created: 

CarolMa6_0-1750090543858.png

 

script include i created: 

CarolMa6_1-1750090602058.png

Catalog client script

CarolMa6_2-1750090686699.png

CarolMa6_3-1750090700247.png

 

Regards 

CarolMa

1 ACCEPTED SOLUTION

@CarolMa6 

In this scenario, if user selects Yes, then Auto-populate the Requested for field with the currently logged in user's id and make the field read-only. You can achieve this using UI policy.

If user selects no, then leave it as is.

Regards,

Siva

View solution in original post

11 REPLIES 11

Chaitanya ILCR
Kilo Patron

Hi @CarolMa6 ,

update the 13 line the client script

 replace sysparm_userID with sysparm_user

 

if you still facing the issue please copy paste the scripts here

 

 

Please mark my answer as helpful/correct if it resolves your query.

Regards,
Chaitanya

 

 

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
}
var requestor = g_form.getValue('request_for_you');

if (request_for_you == 'Yes') {
    var userID = get.userID;

    var ga = new GlideAjax('SARBGetUserDetails');
    ga.addParam('sysparm_name', 'getUserDetails');
    ga.addParam('sysparm_user', userID);
    ga.getXMLAnswer(function(response) {
        var UserDetails = JSON.parse(response);
        g_form.setValue('name', UserDetails.userName);
        g_form.setValue('p_number', UserDetails.pNumber);
        g_form.setValue('department', UserDetails.department);
        g_form.setValue('line_manager', UserDetails.managerName);
    });
    //g_form.setValue('name', userID);
} else if (requestor == 'No') {
    g_form.setValue('name', "");
    g_form.setValue('p_number', "");
    g_form.setValue('department', "");
    g_form.setValue('line_manager', "");
}

//Type appropriate comment here, and begin script below
 
 
 
 
var SARBGetUserDetails = Class.create();
SARBGetUserDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    getUserDetails:function(){
        var note = "";
        var srn = this.getParameter("sysparm_user");
        var ast = new GlideRecord("sys_user");
        ast.addQuery("sys_id", srn);
        ast.query();
        if (!ast.hasNext()){
            gs.addInfoMessage("P/C num ber does not exist, please provide the corect one.");
        } else {
            while (ast.next()) {
                var UserDetails = {
                    "Name": ast.name.getValue(),
                    "P-Number": ast.user_id.getValue(),
                    "Department": ast.department.getValue(),
                    "Line Manager": ast.manager.getValue(),
                };
                gs.addInfoMessage('Test:' +UserDetails);
                return JSON.stringigy(UserDetails);
            }
        }
    },
    type: 'SARBGetUserDetails'
});
 

Hi @CarolMa6 

change the client script  as below

what's get.getUserID? logged in user id?

 function onChange(control, oldValue, newValue, isLoading) {
     if (isLoading || newValue == '') {
         return;
     }

     var requestor = g_form.getValue('request_for_you');

     if (request_for_you == 'Yes') {
         var ga = new GlideAjax('SARBGetUserDetails');
         ga.addParam('sysparm_name', 'getUserDetails');
         ga.addParam('sysparm_user', g_user.getUserID());
         ga.getXMLAnswer(function(response) {
             var UserDetails = JSON.parse(response);
             g_form.setValue('name', UserDetails.userName);
             g_form.setValue('p_number', UserDetails.pNumber);
             g_form.setValue('department', UserDetails.department);
             g_form.setValue('line_manager', UserDetails.managerName);
         });
     } else {
         g_form.setValue('name', "");
         g_form.setValue('p_number', "");
         g_form.setValue('department', "");
         g_form.setValue('line_manager', "");
     }
 }

 

use this script include if department and line_manager are string variables

 var SARBGetUserDetails = Class.create();
 SARBGetUserDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {

     getUserDetails: function() {

         var ast = new GlideRecord("sys_user");
         if (ast.get(this.getParameter("sysparm_user"))) {
             var UserDetails = {
                 "userName": ast.getValue('name'),
                 "pNumber": ast.getValue('user_name'),
                 "department": ast.department.getDisplayValue(),
                 "managerName": ast.manager.getDisplayValue(),
             };
             return JSON.stringify(UserDetails);
         }
     },
     type: 'SARBGetUserDetails'
 });

if they are reference variables

use

 

 var SARBGetUserDetails = Class.create();
 SARBGetUserDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {

     getUserDetails: function() {

         var ast = new GlideRecord("sys_user");
         if (ast.get(this.getParameter("sysparm_user"))) {
             var UserDetails = {
                 "userName": ast.getValue('name'),
                 "pNumber": ast.getValue('user_name'),
                 "department": ast.getValue('department'),
                 "managerName": ast.getValue('manager'),
             };
             return JSON.stringify(UserDetails);
         }
     },
     type: 'SARBGetUserDetails'
 });

Please mark my answer as helpful/correct if it resolves your query.

Regards,
Chaitanya

 

Yes, getUserID is the logged in user id? something is wrong there. It's not populating the logged in user details.