- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-20-2023 05:24 AM
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:
CI Form:
Thanks,
Lavanya
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-20-2023 05:46 AM - edited 10-20-2023 06:02 AM
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');
}
});
}
ServiceNow Developer
I know one thing, and that is that I know nothing.
- Socrates
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-20-2023 05:46 AM - edited 10-20-2023 06:02 AM
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');
}
});
}
ServiceNow Developer
I know one thing, and that is that I know nothing.
- Socrates
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-20-2023 06:02 AM
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-20-2023 06:06 AM - edited 10-20-2023 06:07 AM
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 ***