On an Incident form only Assignment group members should be able to edit short description field. Ho

sry
Giga Guru

Hi, i was asked this question in an interview. please let me know what script we need to write.

 

On an Incident form only Assignment group members should be able to edit short description field. How will we implement it?

Thanks,

sry

1 ACCEPTED SOLUTION

Hi @sry 

Yes, you are correct. We don't wrote GLIDERECORD in client script. Here i am providing script include and client scripts (onLoad & onChange) this will achieve your requirements:

Script include:

var CheckGroupMembership = Class.create();
CheckGroupMembership.prototype = {
    initialize: function() {},

    isUserInGroup: function(assignmentGroupId, userId) {
        var userInGroup = false;

        // Query to check if the user is a member of the assignment group
        var groupMemberGR = new GlideRecord('sys_user_grmember');
        groupMemberGR.addQuery('group', assignmentGroupId);
        groupMemberGR.addQuery('user', userId);
        groupMemberGR.query();

        if (groupMemberGR.next()) {
            userInGroup = true; // User is in the assignment group
        }

        return userInGroup; // Return true or false
    },

    type: 'CheckGroupMembership'
};

 

onLoad Client script:

function onLoad() {
    var assignmentGroup = g_form.getValue('assignment_group'); // Get the assignment group
    var userID = g_user.userID; // Get the current user ID

    // Proceed only if the assignment group is set
    if (assignmentGroup) {
        // Create a GlideAjax object
        var ga = new GlideAjax('CheckGroupMembership');
        ga.addParam('sysparm_name', 'isUserInGroup');
        ga.addParam('sysparm_assignment_group', assignmentGroup);
        ga.addParam('sysparm_user', userID);

        // Call the Script Include and get the response
        ga.getXMLAnswer(function(response) {
            var userInGroup = response === 'true'; // Convert response to boolean
            
            // Disable the short description field if the user is not in the group
            g_form.setReadOnly('short_description', !userInGroup);
            
            // Optional: Inform the user
            if (!userInGroup) {
                g_form.addInfoMessage("You do not have permission to edit the short description.");
            }
        });
    } else {
        // Optional: handle case when no assignment group is selected
        g_form.addInfoMessage("Please select an assignment group.");
    }
}

 

onChange client script: To handle the scenario where the assigned user changes after the form loads 

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue === '') {
        return; // Do not execute if the form is loading or the new value is empty
    }

    var assignmentGroup = g_form.getValue('assignment_group'); // Get the current assignment group
    var userID = newValue; // Use the new assigned user ID

    if (assignmentGroup) {
        // Create a GlideAjax object
        var ga = new GlideAjax('CheckGroupMembership');
        ga.addParam('sysparm_name', 'isUserInGroup');
        ga.addParam('sysparm_assignment_group', assignmentGroup);
        ga.addParam('sysparm_user', userID);

        // Call the Script Include and get the response
        ga.getXMLAnswer(function(response) {
            var userInGroup = response === 'true'; // Convert response to boolean
            
            // Disable the short description field if the new user is not in the group
            g_form.setReadOnly('short_description', !userInGroup);
            
            // Optional: Inform the user
            if (!userInGroup) {
                g_form.addInfoMessage("You do not have permission to edit the short description.");
            } else {
                g_form.clearInfoMessage(); // Clear any previous message if the user is now allowed
            }
        });
    }
}

 

View solution in original post

5 REPLIES 5

Rajesh Chopade1
Mega Sage

hi @sry 

you can achieve by onLoad client script:

function onLoad() {
    var assignmentGroup = g_form.getValue('assignment_group'); // Get the assignment group
    var userID = g_user.userID; // Get the current user ID
    var userInGroup = false; // Initialize a flag

    // Query to check if the user is a member of the assignment group
    var groupMemberGR = new GlideRecord('sys_user_grmember');
    groupMemberGR.addQuery('group', assignmentGroup);
    groupMemberGR.addQuery('user', userID);
    groupMemberGR.query();

    if (groupMemberGR.next()) {
        userInGroup = true; // User is in the assignment group
    }

    // Disable the short description field if the user is not in the group
    if (!userInGroup) {
        g_form.setReadOnly('short_description', true);
    }
}

 

i hope my answer helps you to resolve your issue, if yes please mark my answer helpful and correct.

thank you

rajesh

Hi Rajesh, its not working. we dont arote GLIDERECORD in client script right. it must be through GlideAJAX i guess.

 

Thanks,

SRY

Hi @sry 

Yes, you are correct. We don't wrote GLIDERECORD in client script. Here i am providing script include and client scripts (onLoad & onChange) this will achieve your requirements:

Script include:

var CheckGroupMembership = Class.create();
CheckGroupMembership.prototype = {
    initialize: function() {},

    isUserInGroup: function(assignmentGroupId, userId) {
        var userInGroup = false;

        // Query to check if the user is a member of the assignment group
        var groupMemberGR = new GlideRecord('sys_user_grmember');
        groupMemberGR.addQuery('group', assignmentGroupId);
        groupMemberGR.addQuery('user', userId);
        groupMemberGR.query();

        if (groupMemberGR.next()) {
            userInGroup = true; // User is in the assignment group
        }

        return userInGroup; // Return true or false
    },

    type: 'CheckGroupMembership'
};

 

onLoad Client script:

function onLoad() {
    var assignmentGroup = g_form.getValue('assignment_group'); // Get the assignment group
    var userID = g_user.userID; // Get the current user ID

    // Proceed only if the assignment group is set
    if (assignmentGroup) {
        // Create a GlideAjax object
        var ga = new GlideAjax('CheckGroupMembership');
        ga.addParam('sysparm_name', 'isUserInGroup');
        ga.addParam('sysparm_assignment_group', assignmentGroup);
        ga.addParam('sysparm_user', userID);

        // Call the Script Include and get the response
        ga.getXMLAnswer(function(response) {
            var userInGroup = response === 'true'; // Convert response to boolean
            
            // Disable the short description field if the user is not in the group
            g_form.setReadOnly('short_description', !userInGroup);
            
            // Optional: Inform the user
            if (!userInGroup) {
                g_form.addInfoMessage("You do not have permission to edit the short description.");
            }
        });
    } else {
        // Optional: handle case when no assignment group is selected
        g_form.addInfoMessage("Please select an assignment group.");
    }
}

 

onChange client script: To handle the scenario where the assigned user changes after the form loads 

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue === '') {
        return; // Do not execute if the form is loading or the new value is empty
    }

    var assignmentGroup = g_form.getValue('assignment_group'); // Get the current assignment group
    var userID = newValue; // Use the new assigned user ID

    if (assignmentGroup) {
        // Create a GlideAjax object
        var ga = new GlideAjax('CheckGroupMembership');
        ga.addParam('sysparm_name', 'isUserInGroup');
        ga.addParam('sysparm_assignment_group', assignmentGroup);
        ga.addParam('sysparm_user', userID);

        // Call the Script Include and get the response
        ga.getXMLAnswer(function(response) {
            var userInGroup = response === 'true'; // Convert response to boolean
            
            // Disable the short description field if the new user is not in the group
            g_form.setReadOnly('short_description', !userInGroup);
            
            // Optional: Inform the user
            if (!userInGroup) {
                g_form.addInfoMessage("You do not have permission to edit the short description.");
            } else {
                g_form.clearInfoMessage(); // Clear any previous message if the user is now allowed
            }
        });
    }
}

 

its working. however you forgot to check script include (client callable)