Populate two fields onChange of Configuration item field

Lavanya Nagendr
Giga Guru

Hi All,

 

The below is the requirement and script that already exists. Kindly help me on this.

 

Old version of the requirement:

Whenever a CI changes it will populate the field "Incident Management Group" on the Incident form with values of 'Incident Management group' field on the CI form.

 

New version of the requirement:

Whenever a CI changes, if the Opened by user is a part of "Incident Management" group then populate the field "Incident Management Group" on the Incident form as "Incident Management". Else, populate the field "Incident Management Group" on the Incident form with values of 'Incident Management group' field on the CI form.

 

Client Script:

Type: OnChange

Field name: Configuration Item

Table: Incident

Script:

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

	var ajax = new GlideAjax('PR_IncidentUtils');
	ajax.addParam('sysparm_name', 'getCIIncidentManagementGroup');
	ajax.addParam('sysparm_ci', newValue);
	ajax.getXMLAnswer(function(ans){
		if(ans.toString() != 'false'){
			g_form.setValue('u_incident_management_group', ans);
		}else{
			g_form.clearValue('u_incident_management_group');
		}
	});

}

 

Script Include:

 

Name: PR_IncidentUtils

Function: getCIIncidentManagementGroup

Script:

getCIIncidentManagementGroup: function(){
		var grCmdb = new GlideRecord('cmdb_ci');
		grCmdb.addQuery('sys_id', this.getParameter('sysparm_ci'));
		grCmdb.addQuery('u_incident_management_group', '!=', 'NULL');
		grCmdb.query();
		if(grCmdb.next()){
			return grCmdb.getValue('u_incident_management_group');
		}
		return false;
	},

 

 

Incident Form:

Screenshot 2023-10-20 at 5.51.20 PM.png

 

CI Form:

Screenshot 2023-10-20 at 5.53.23 PM.png

 

Thanks,

Lavanya

1 ACCEPTED SOLUTION

Vishal Birajdar
Giga Sage

Hi @Lavanya Nagendr 

 

With my understanding, You want to set "Incident management group" field depending upon Opened by  (incident management) else should be populated as group present on CI's group....??

 

Is this correct..??

 

If I'm correct then you can adjust your code like below :

 

1.Script Include : 

 

getCIIncidentManagementGroup: function(){
/*1. Decalre variable to return the result */
var result;
var groupSysId = "<sysId_of_incident management group>";

/*2. Get opened by & CI from client script */
var openedBy = this.getParameter('sysparm_openedBy');
var ci       = this.getParameter('sysparm_ci');


/*2. Check group membership of Opened by user */
var grMem = new GlideRecord('sys_user_grmember');
grMem.addEncodedQuery('group=' + groupSysId +'^user=' + openedBy);
grMem.query();
if(grMem.next()){
 /* Opened by is member of "Incident management group" so set result to groupSysId */  
   result = groupSysId;
} else {
    /*Opened by is not member of "Incident management group" so set result to group present on CI */
		var grCmdb = new GlideRecord('cmdb_ci');
		grCmdb.addQuery('sys_id', ci);
		grCmdb.addQuery('u_incident_management_group', '!=', 'NULL');
		grCmdb.query();
		if(grCmdb.next()){
			result =  grCmdb.getValue('u_incident_management_group');
		} else {
            return false;
        }
}       
return result;
}

 

2.Client Script :

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
	if (isLoading || newValue === '') {
		return;
	}
     /*1. Get value of opened by */
    var openedBy = g_form.getValue('opened_by');   //use your backend value

	var ajax = new GlideAjax('PR_IncidentUtils');
	ajax.addParam('sysparm_name', 'getCIIncidentManagementGroup');
	ajax.addParam('sysparm_ci', newValue);
    ajax.addParam('sysparm_openedBy',openedBy);
	ajax.getXMLAnswer(function(ans){
		if(ans.toString() != 'false'){
			g_form.setValue('u_incident_management_group', ans);
		}else{
			g_form.clearValue('u_incident_management_group');
		}
	});

}

 

 

 

Vishal Birajdar
ServiceNow Developer

I know one thing, and that is that I know nothing.
- Socrates

View solution in original post

3 REPLIES 3

Vishal Birajdar
Giga Sage

Hi @Lavanya Nagendr 

 

With my understanding, You want to set "Incident management group" field depending upon Opened by  (incident management) else should be populated as group present on CI's group....??

 

Is this correct..??

 

If I'm correct then you can adjust your code like below :

 

1.Script Include : 

 

getCIIncidentManagementGroup: function(){
/*1. Decalre variable to return the result */
var result;
var groupSysId = "<sysId_of_incident management group>";

/*2. Get opened by & CI from client script */
var openedBy = this.getParameter('sysparm_openedBy');
var ci       = this.getParameter('sysparm_ci');


/*2. Check group membership of Opened by user */
var grMem = new GlideRecord('sys_user_grmember');
grMem.addEncodedQuery('group=' + groupSysId +'^user=' + openedBy);
grMem.query();
if(grMem.next()){
 /* Opened by is member of "Incident management group" so set result to groupSysId */  
   result = groupSysId;
} else {
    /*Opened by is not member of "Incident management group" so set result to group present on CI */
		var grCmdb = new GlideRecord('cmdb_ci');
		grCmdb.addQuery('sys_id', ci);
		grCmdb.addQuery('u_incident_management_group', '!=', 'NULL');
		grCmdb.query();
		if(grCmdb.next()){
			result =  grCmdb.getValue('u_incident_management_group');
		} else {
            return false;
        }
}       
return result;
}

 

2.Client Script :

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
	if (isLoading || newValue === '') {
		return;
	}
     /*1. Get value of opened by */
    var openedBy = g_form.getValue('opened_by');   //use your backend value

	var ajax = new GlideAjax('PR_IncidentUtils');
	ajax.addParam('sysparm_name', 'getCIIncidentManagementGroup');
	ajax.addParam('sysparm_ci', newValue);
    ajax.addParam('sysparm_openedBy',openedBy);
	ajax.getXMLAnswer(function(ans){
		if(ans.toString() != 'false'){
			g_form.setValue('u_incident_management_group', ans);
		}else{
			g_form.clearValue('u_incident_management_group');
		}
	});

}

 

 

 

Vishal Birajdar
ServiceNow Developer

I know one thing, and that is that I know nothing.
- Socrates

Harsh_Deep
Giga Sage
Giga Sage

Hello @Lavanya Nagendr ,

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

	var num = g_form.getValue('number')
	var ajax = new GlideAjax('PR_IncidentUtils');
	ajax.addParam('sysparm_name', 'getCIIncidentManagementGroup');
	ajax.addParam('sysparm_ci', newValue);
	ajax.addParam('sysparm_num', num);
	ajax.getXMLAnswer(function(ans){
		if(ans.toString() != 'false'){
			g_form.setValue('u_incident_management_group', ans);
		}else{
			g_form.clearValue('u_incident_management_group');
		}
	});

}

Script Include -

getCIIncidentManagementGroup: function(){
		var num = this.getParameter('sysparm_num')
		var grIn = new glideRecord('incident');
		grIn.addQuery('number',num);
		if(grIn.next()){
		var grCmdb = new GlideRecord('cmdb_ci');
		grCmdb.addQuery('sys_id', this.getParameter('sysparm_ci'));
		grCmdb.addQuery('u_incident_management_group', '!=', 'NULL');
		grCmdb.query();
		if(grCmdb.next()){
			var group = grCmdb.getValue('u_incident_management_group');
			var grMem = new GlideRceord('sys_user_grmember');
			grMem.addEncodedQuery('group='+group+'^user='+grIn.opened_by);
			grMem.query();
			if(grMem.next()){
				return "user is the member of the group";
			}
		}
		}
		else{
		return false;
		}
		
	},

 

Mark Correct if this solves your issue and also mark 👍Helpful if you find my response worthy based on the impact.

Eswar Chappa
Mega Sage
Mega Sage

Hi @Lavanya Nagendr  can you try to include by passing sys_id of Opended by user as parameter to Script include.In script include after 

 

if(grCmdb.next()){

 

write an if condition to check   with using the below function 

 

 

if(grCmdb.next()){
var ans=isUserInGroup();
if(ans==true){
			return grCmdb.getValue('sys_id of Incident Management');
}
else{
return grCmdb.getValue('u_incident_management_group');
		}
		return false;



isUserInGroup: function (userId, groupName) {

var grMembership = new GlideRecord('sys_user_grmember');

grMembership.addQuery('user', userId);

grMembership.addQuery('group', groupName);

grMembership.query();

if(grMembership.next()){

return true;

}

return false:

 }

 

 

Cheers, hope that helps

Eswar Chappa

*** Please mark as "Correct" or "Helpful" as appropriate ***