- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-07-2020 01:04 AM
Hello All,
Can someone please help me ?
I have added a ui action to create outage in change.It will automatically populate short description and configuration item in the window.How its populating?
I want to populate planned start date in begin field and planned end date in end in the outage window.
createOutageM2M();
function createOutageM2M() {
current.update();
var url = new CreateOutageUtil().getNewOutageLink(current);
action.setRedirectURL(url);
action.setReturnURL(current);
}
Thanks
Saranya
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-08-2020 12:44 PM
Here you go.
Script include:
Name: OutageDateValidation
Client callable: True
Script:
var OutageDateValidation = Class.create();
OutageDateValidation.prototype = Object.extendsObject(AbstractAjaxProcessor, {
validateStartEndDate: function() {
var startDate = this.getParameter('sysparm_start_date');
var endDate = this.getParameter('sysparm_end_date');
var changeRequest = this.getParameter('sysparm_change_sys_id');
var grChange = new GlideRecord('change_request');
if (grChange.get(changeRequest)) {
if ((!JSUtil.nil(startDate) && (startDate < grChange.start_date.getDisplayValue() || startDate >= grChange.end_date.getDisplayValue())) || (!JSUtil.nil(endDate) && (endDate <= grChange.start_date.getDisplayValue() || endDate > grChange.end_date.getDisplayValue()))) {
return 1;
} else if (!JSUtil.nil(startDate) && !JSUtil.nil(endDate) && startDate >= endDate) {
return 2;
} else {
return true;
}
} else {
return true;
}
},
type: 'OutageDateValidation'
});
Client script 1:
Name: Validate Begin date
Table: Outage [cmdb_ci_outage]
Type: onChange
Field name: Begin
Script:
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var changeSysID = g_form.getValue("task_number");
var endDate = g_form.getValue("end");
var ga = new GlideAjax('OutageDateValidation');
ga.addParam('sysparm_name', 'validateStartEndDate');
ga.addParam('sysparm_change_sys_id', changeSysID);
ga.addParam('sysparm_start_date', newValue);
ga.addParam('sysparm_end_date', endDate);
ga.getXML(callback);
}
function callback(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
if (answer != "true") {
g_form.clearValue("begin");
if (answer == "1") {
g_form.showFieldMsg("begin", "Begin date must be between Planned start date and Planned end date on Change request", "error");
} else {
g_form.showFieldMsg("begin", "Begin date must be before End", "error");
}
}
}
Client script 2:
Name: Validate End date
Table: Outage [cmdb_ci_outage]
Type: onChange
Field name: End
Script:
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var changeSysID = g_form.getValue("task_number");
var beginDate = g_form.getValue("begin");
var ga = new GlideAjax('OutageDateValidation');
ga.addParam('sysparm_name', 'validateStartEndDate');
ga.addParam('sysparm_change_sys_id', changeSysID);
ga.addParam('sysparm_start_date', beginDate);
ga.addParam('sysparm_end_date', newValue);
ga.getXML(callback);
}
function callback(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
if (answer != "true") {
g_form.clearValue("end");
if (answer == "1") {
g_form.showFieldMsg("end", "End date must be between Planned start date and Planned end date on Change request", "error");
} else {
g_form.showFieldMsg("end", "End date must be after Begin", "error");
}
}
}
Hope this helps!
-Tanaji
Please mark answer correct/helpful based on impact.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-08-2020 12:44 PM
Here you go.
Script include:
Name: OutageDateValidation
Client callable: True
Script:
var OutageDateValidation = Class.create();
OutageDateValidation.prototype = Object.extendsObject(AbstractAjaxProcessor, {
validateStartEndDate: function() {
var startDate = this.getParameter('sysparm_start_date');
var endDate = this.getParameter('sysparm_end_date');
var changeRequest = this.getParameter('sysparm_change_sys_id');
var grChange = new GlideRecord('change_request');
if (grChange.get(changeRequest)) {
if ((!JSUtil.nil(startDate) && (startDate < grChange.start_date.getDisplayValue() || startDate >= grChange.end_date.getDisplayValue())) || (!JSUtil.nil(endDate) && (endDate <= grChange.start_date.getDisplayValue() || endDate > grChange.end_date.getDisplayValue()))) {
return 1;
} else if (!JSUtil.nil(startDate) && !JSUtil.nil(endDate) && startDate >= endDate) {
return 2;
} else {
return true;
}
} else {
return true;
}
},
type: 'OutageDateValidation'
});
Client script 1:
Name: Validate Begin date
Table: Outage [cmdb_ci_outage]
Type: onChange
Field name: Begin
Script:
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var changeSysID = g_form.getValue("task_number");
var endDate = g_form.getValue("end");
var ga = new GlideAjax('OutageDateValidation');
ga.addParam('sysparm_name', 'validateStartEndDate');
ga.addParam('sysparm_change_sys_id', changeSysID);
ga.addParam('sysparm_start_date', newValue);
ga.addParam('sysparm_end_date', endDate);
ga.getXML(callback);
}
function callback(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
if (answer != "true") {
g_form.clearValue("begin");
if (answer == "1") {
g_form.showFieldMsg("begin", "Begin date must be between Planned start date and Planned end date on Change request", "error");
} else {
g_form.showFieldMsg("begin", "Begin date must be before End", "error");
}
}
}
Client script 2:
Name: Validate End date
Table: Outage [cmdb_ci_outage]
Type: onChange
Field name: End
Script:
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var changeSysID = g_form.getValue("task_number");
var beginDate = g_form.getValue("begin");
var ga = new GlideAjax('OutageDateValidation');
ga.addParam('sysparm_name', 'validateStartEndDate');
ga.addParam('sysparm_change_sys_id', changeSysID);
ga.addParam('sysparm_start_date', beginDate);
ga.addParam('sysparm_end_date', newValue);
ga.getXML(callback);
}
function callback(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
if (answer != "true") {
g_form.clearValue("end");
if (answer == "1") {
g_form.showFieldMsg("end", "End date must be between Planned start date and Planned end date on Change request", "error");
} else {
g_form.showFieldMsg("end", "End date must be after Begin", "error");
}
}
}
Hope this helps!
-Tanaji
Please mark answer correct/helpful based on impact.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-08-2020 12:45 PM
Make sure the Task Number field is on the form. Otherwise it wont work.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-10-2020 03:21 AM
Hi Tanaji,
A billion thanks.Its working perfectly.
But client suggest to hide the task number from the form.So it wil not work.
What we can do?
Thanks
Saranya

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-10-2020 09:10 AM
Have it on the form but hide it using a UI policy (without any condition so that it's always hidden).
Then it will work as you want.
-Tanaji
Please mark response correct/helpful if applicable.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-15-2020 03:03 AM
If its working and you are happy with the solution please dont forget to close the thread by marking the correct answer.
-Tanaji
Please mark reply correct/helpful if applicable