- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-04-2024 05:46 AM
Need to pass two reference field values from client script to Script include.Please provide help.
Field 1. name: cmdb_ci reference to 'cmdb_ci' need Business owner field ( u_business_owner) and Service Owner field (u_service_owner) both are referring to sys_user_group table.
Below is an onChange Client script:
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var enddate = newValue;
var startdate = g_form.getValue('start_date');
var ci = g_form.getValue('cmdb_ci.u_business_owner.getDisplayValue()');
var so = g_form.getValue('cmdb_ci.u_service_owner.getDisplayValue()');
var ga = new GlideAjax('global.ChangeManagementClientUtils'); //script include name
ga.addParam('sysparm_name', 'checkPlannedDates'); //function name
ga.addParam('sysparm_name_date', startdate); //passing startdate
ga.addParam('sysparm_name_date_1', enddate); //passing enddate
ga.addParam('sysparm_name_ci',ci);//passing ci
ga.addParam('sysparm_name_so',so);//passing so
ga.getXMLAnswer(checkPlannedDates1);
function checkPlannedDates1(response) {
if (response == 'true') {
// g_form.setReadOnly('domain', false);
g_form.addErrorMessage('hi');
} else {
g_form.setMandatory('justification', true);
g_form.addErrorMessage('Please fill mandatory fields');
}
}
}
Script Include:
var ChangeManagementClientUtils = Class.create();
ChangeManagementClientUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
checkPlannedDates: function(){
var start_date = this.getParameter('sysparm_name_date');//getting usersysid from client
var end_date = this.getParameter('sysparm_name_date_1');
var business_owner = this.getParameter('sysparm_name_ci');
var service_owner = this.getParameter('sysparm_name_so');
var isValidWindow = false;
var est = Packages.java.util.TimeZone.getTimeZone('US/Eastern');
var startDt = new GlideDateTime(start_date);
var endDt = new GlideDateTime(end_date);
if(((startDt.getDayOfWeekLocalTime()==5 || startDt.getDayOfWeekLocalTime()==6) && (endDt.getDayOfWeekLocalTime()>=5 && endDt.getDayOfWeekLocalTime()<=6)) || ((service_owner.indexOf('Infrastructure Arch')>-1 || business_owner.indexOf('Infrastructure Arch')>-1) && startDt.getDayOfWeekLocalTime()>=5 && startDt.getDayOfWeekLocalTime()<=7 && endDt.getDayOfWeekLocalTime()>=5 && endDt.getDayOfWeekLocalTime()<=7)){
var estGdt = new GlideDateTime('start_date');
estGdt.setTZ(est);
if(startDt.getDayOfWeekLocalTime()==4)
estGdt.setValue(estGdt.toString().split(' ')[0]+' 19:00:00');
var estEndGdt = new GlideDateTime('end_date');
estEndGdt.setTZ(est);
estEndGdt.setValue(estEndGdt.toString().split(' ')[0]+' 23:59:00');
if(endDt.getDayOfWeekLocalTime()==7 && (service_owner.indexOf('Infrastructure Arch')>-1 || business_owner.indexOf('Infrastructure Arch')>-1)){
var hours = 60*60*12;
estEndGdt.addSeconds(hours);
}
if((estGdt.getNumericValue()<=new GlideDateTime('start_date').getNumericValue()) && (estEndGdt.getNumericValue()>new GlideDateTime('end_date').getNumericValue())){
isValidWindow = true;
}
}
return isValidWindow;
},
type: 'ChangeManagementClientUtils'
});
Thank you!
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-04-2024 03:00 PM
Hi @Shidhi ,
Please find the updated scripts.
Client script-
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var enddate = newValue;
var startdate = g_form.getValue('start_date');
var ciSysId = g_form.getValue('cmdb_ci');
// Retrieve the business owner and service owner asynchronously
g_form.getReference('cmdb_ci', function(ciRecord) {
var businessOwner = ciRecord.u_business_owner;
var serviceOwner = ciRecord.u_service_owner;
var ga = new GlideAjax('ChangeManagementClientUtils');
ga.addParam('sysparm_name', 'checkPlannedDates');
ga.addParam('sysparm_name_date', startdate);
ga.addParam('sysparm_name_date_1', enddate);
ga.addParam('sysparm_name_ci', businessOwner); // passing business owner sys_id
ga.addParam('sysparm_name_so', serviceOwner); // passing service owner sys_id
ga.getXMLAnswer(checkPlannedDates1);
function checkPlannedDates1(response) {
if (response === 'true') {
g_form.addErrorMessage('hi');
} else {
g_form.setMandatory('justification', true);
g_form.addErrorMessage('Please fill the justification for scheduling change outside change window Friday 7:00 pm ET - Saturday 11:59 pm ET and Saturday 10:00 pm ET to Sunday 12:00 pm ET');
}
}
});
}
Script include -
var ChangeManagementClientUtils = Class.create();
ChangeManagementClientUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
checkPlannedDates: function() {
var start_date = this.getParameter('sysparm_name_date');
var end_date = this.getParameter('sysparm_name_date_1');
var business_owner = this.getParameter('sysparm_name_ci');
var service_owner = this.getParameter('sysparm_name_so');
var businessOwnerName = '';
var serviceOwnerName = '';
var userGR = new GlideRecord('sys_user');
if (userGR.get(business_owner)) {
businessOwnerName = userGR.getDisplayValue();
}
if (userGR.get(service_owner)) {
serviceOwnerName = userGR.getDisplayValue();
}
var isValidWindow = false;
var est = Packages.java.util.TimeZone.getTimeZone('US/Eastern');
var startDt = new GlideDateTime(start_date);
var endDt = new GlideDateTime(end_date);
if (((startDt.getDayOfWeekLocalTime() == 5 || startDt.getDayOfWeekLocalTime() == 6) && (endDt.getDayOfWeekLocalTime() >= 5 && endDt.getDayOfWeekLocalTime() <= 6)) ||
((serviceOwnerName.indexOf('Infrastructure Arch') > -1 || businessOwnerName.indexOf('Infrastructure Arch') > -1) && startDt.getDayOfWeekLocalTime() >= 5 && startDt.getDayOfWeekLocalTime() <= 7 && endDt.getDayOfWeekLocalTime() >= 5 && endDt.getDayOfWeekLocalTime() <= 7)) {
var estGdt = new GlideDateTime(start_date);
estGdt.setTZ(est);
if (startDt.getDayOfWeekLocalTime() == 4)
estGdt.setValue(estGdt.toString().split(' ')[0] + ' 19:00:00');
var estEndGdt = new GlideDateTime(end_date);
estEndGdt.setTZ(est);
estEndGdt.setValue(estEndGdt.toString().split(' ')[0] + ' 23:59:00');
if (endDt.getDayOfWeekLocalTime() == 7 && (serviceOwnerName.indexOf('Infrastructure Arch') > -1 || businessOwnerName.indexOf('Infrastructure Arch') > -1)) {
var hours = 60 * 60 * 12;
estEndGdt.addSeconds(hours);
}
if ((estGdt.getNumericValue() <= new GlideDateTime(start_date).getNumericValue()) && (estEndGdt.getNumericValue() > new GlideDateTime(end_date).getNumericValue())) {
isValidWindow = true;
}
}
return isValidWindow;
},
type: 'ChangeManagementClientUtils'
});
If my response has resolved your query, please consider giving it a thumbs up and marking it as the correct answer!
Thanks & Regards,
Sanjay Kumar
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-04-2024 06:05 AM
var ci = g_form.getValue('cmdb_ci.u_business_owner.getDisplayValue()'); var so = g_form.getValue('cmdb_ci.u_service_owner.getDisplayValue()');
instead of this try using
g_form.getValue("cmdb_ci.u_business_owner"). //return sys_id
g_form.getDisplayValue("cmdb_ci.u_business_owner") //return display Value
Do same for other field which you needed in Script Include
Please mark this correct If it is Helpful! ✅
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-04-2024 06:18 AM
Hi @Shidhi ,
We can not user g_form.getDisplayValue() in client script for that always use either GlideAjax or getReference
Please try like below script
var userref = g_form.getReference('caller_id').name;
alert("Name = " + userref);
This will give the name of current user not sys_id.
Result
So for in your case it would like below
var ci = g_form.getReference('cmdb_ci.u_business_owner').name;
alert("CI" + ci);
Please mark my answer correct and helpful if this works for you
Thanks and Regards
Sarthak
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-04-2024 06:53 AM
Hi @Community Alums
I have modified my code below.
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var enddate = newValue;
var startdate = g_form.getValue('start_date');
var so = g_form.getValue('cmdb_ci.u_service_owner.getDisplayValue()');
var ci = g_form.getReference('cmdb_ci.u_business_owner').name; //used the line given by you
alert("CI" + ci);
var ga = new GlideAjax('global.ChangeManagementClientUtils'); //script include name
ga.addParam('sysparm_name', 'checkPlannedDates'); //function name
ga.addParam('sysparm_name_date', startdate); //passing startdate
ga.addParam('sysparm_name_date_1', enddate); //passing enddate
ga.addParam('sysparm_name_ci', ci); //passing ci
ga.addParam('sysparm_name_so', so); //passing so
ga.getXMLAnswer(checkPlannedDates1);
function checkPlannedDates1(response) {
if (response == 'true') {
// g_form.setReadOnly('domain', false);
g_form.addErrorMessage('hi');
} else {
g_form.setMandatory('justification', true);
g_form.addErrorMessage('Please fill the justification for scheduling change outside change window Friday 7:00 pm ET - Saturday 11:59 pm ET and Saturday 10:00 pm ET to Sunday 12:00 pm ET');
}
}
}
below is the error i'm getting.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-04-2024 07:28 AM
Hi @Shidhi ,
The issue is in the way you are trying to access the reference records and also the display part.
Below is the corrected scripts-
Client Script-
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var enddate = newValue;
var startdate = g_form.getValue('start_date');
// Get the sys_id of the cmdb_ci field
var ciSysId = g_form.getValue('cmdb_ci');
// Retrieve the business owner and service owner
g_form.getReference('cmdb_ci', function(ciRecord) {
var businessOwner = ciRecord.u_business_owner.name;
var serviceOwner = ciRecord.u_service_owner.name;
var ga = new GlideAjax('ChangeManagementClientUtils');
ga.addParam('sysparm_name', 'checkPlannedDates');
ga.addParam('sysparm_name_date', startdate);
ga.addParam('sysparm_name_date_1', enddate);
ga.addParam('sysparm_ci_sys_id', ciSysId);
ga.getXMLAnswer(checkPlannedDates1);
function checkPlannedDates1(response) {
if (response == 'true') {
g_form.addErrorMessage('hi');
} else {
g_form.setMandatory('justification', true);
g_form.addErrorMessage('Please fill the justification for scheduling change outside change window Friday 7:00 pm ET - Saturday 11:59 pm ET and Saturday 10:00 pm ET to Sunday 12:00 pm ET');
}
}
});
}
Script Include-
var ChangeManagementClientUtils = Class.create();
ChangeManagementClientUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
checkPlannedDates: function() {
var start_date = this.getParameter('sysparm_name_date');
var end_date = this.getParameter('sysparm_name_date_1');
var ciSysId = this.getParameter('sysparm_ci_sys_id');
var business_owner = '';
var service_owner = '';
var ciRecord = new GlideRecord('cmdb_ci');
if (ciRecord.get(ciSysId)) {
business_owner = ciRecord.getDisplayValue('u_business_owner');
service_owner = ciRecord.getDisplayValue('u_service_owner');
}
var isValidWindow = false;
var est = Packages.java.util.TimeZone.getTimeZone('US/Eastern');
var startDt = new GlideDateTime(start_date);
var endDt = new GlideDateTime(end_date);
if (((startDt.getDayOfWeekLocalTime() == 5 || startDt.getDayOfWeekLocalTime() == 6) && (endDt.getDayOfWeekLocalTime() >= 5 && endDt.getDayOfWeekLocalTime() <= 6)) ||
((service_owner.indexOf('Infrastructure Arch') > -1 || business_owner.indexOf('Infrastructure Arch') > -1) && startDt.getDayOfWeekLocalTime() >= 5 && startDt.getDayOfWeekLocalTime() <= 7 && endDt.getDayOfWeekLocalTime() >= 5 && endDt.getDayOfWeekLocalTime() <= 7)) {
var estGdt = new GlideDateTime(start_date);
estGdt.setTZ(est);
if (startDt.getDayOfWeekLocalTime() == 4)
estGdt.setValue(estGdt.toString().split(' ')[0] + ' 19:00:00');
var estEndGdt = new GlideDateTime(end_date);
estEndGdt.setTZ(est);
estEndGdt.setValue(estEndGdt.toString().split(' ')[0] + ' 23:59:00');
if (endDt.getDayOfWeekLocalTime() == 7 && (service_owner.indexOf('Infrastructure Arch') > -1 || business_owner.indexOf('Infrastructure Arch') > -1)) {
var hours = 60 * 60 * 12;
estEndGdt.addSeconds(hours);
}
if ((estGdt.getNumericValue() <= new GlideDateTime(start_date).getNumericValue()) && (estEndGdt.getNumericValue() > new GlideDateTime(end_date).getNumericValue())) {
isValidWindow = true;
}
}
return isValidWindow;
},
type: 'ChangeManagementClientUtils'
});
If my response has resolved your query, please consider giving it a thumbs up and marking it as the correct answer!
Thanks & Regards,
Sanjay Kumar