Author: Rohan Aditya
Date: 7th October 2025
Key points covered:
function onClick(g_form) {
var sys_id = g_form.getUniqueValue();
var url = top.location.href;
var routeGr = new GlideAjax(‘KAPChangeUtils’);
routeGr.addParam('sysparm_name','getBaseURL');
routeGr.getXMLAnswer(function(response){
var route = url.split(response);
var newUrl = route[1] + '/sub/change-conflict-calendar/' + sys_id;
open(newUrl, '_self');
});
}
var KAPChangeUtils = Class.create();
KAPChangeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getBaseURL: function(){
return gs.getProperty('glide.servlet.uri').toString();
},
type: 'KAPChangeUtils'
});
Now we have Conflict Calendar form button in CSM/ FSM Configurable workspace. After clicking on Conflict Calendar we get,
function onClick(g_form) {
invokeAssessment();
}
function invokeAssessment() {
g_form.hideAllFieldMsgs();
if (g_form.isUserModified()) {
handleDirtyForm();
} else {
var changeRequestSysId = g_form.getUniqueValue();
var tableName = g_form.getTableName();
var ga = new GlideAjax("ChangeRiskAsmtAjax");
ga.addParam("sysparm_name", "invokeAssessmentAjax");
ga.addParam("sysparm_id", changeRequestSysId);
ga.addParam("sysparm_class", tableName);
ga.getXMLAnswer(function(answer) {
answer = JSON.parse(answer);
if (!answer.hasAsmt)
g_form.addInfoMessage(getMessage("There are no risk assessments defined for this Change Request"));
else {
if (answer.asmtComplete)
handleCompletedAsmt();
else {
var asmtInstanceSysId = answer.asmtInstanceSysId;
var changeRiskAsmtSysId = answer.changeRiskAsmtSysId;
var changeRequestSysId = answer.changeRequestSysId;
var riskAsmtName = answer.riskAsmtName;
handleAsmt(asmtInstanceSysId, changeRiskAsmtSysId, changeRequestSysId, riskAsmtName);
}
}
});
}
}
function handleDirtyForm() {
var msg = getMessage("Do you want to save changes to " + g_form.getValue("number") + " before leaving this page?");
g_modal.confirm(getMessage("Confirmation"), msg, function(confirmed) {
if (confirmed) {
g_form.save();
}
});
}
function handleCompletedAsmt() {
var msg = getMessage("You have already completed the risk assessment. Would you like to edit your existing risk assessment?");
g_modal.confirm(getMessage("Confirmation"), msg, function(confirmed) {
if (confirmed) {
var changeRequestSysId = g_form.getUniqueValue();
var tableName = g_form.getTableName();
var ga = new GlideAjax("ChangeRiskAsmtAjax");
ga.addParam("sysparm_name", "copyAssessmentAjax");
ga.addParam("sysparm_id", changeRequestSysId);
ga.addParam("sysparm_class", tableName);
ga.getXMLAnswer(function(answer) {
answer = JSON.parse(answer);
if (!answer || !answer.hasAsmt)
g_form.addInfoMessage(getMessage("There are no risk assessments defined for this Change Request"));
else {
var asmtInstanceSysId = answer.asmtInstanceSysId;
var changeRiskAsmtSysId = answer.changeRiskAsmtSysId;
var changeRequestSysId = answer.changeRequestSysId;
var riskAsmtName = answer.riskAsmtName;
handleAsmt(asmtInstanceSysId, changeRiskAsmtSysId, changeRequestSysId, riskAsmtName);
}
});
}
});
}
function handleAsmt(asmtInstanceSysId, changeRiskAsmtSysId, changeRequestSysId, riskAsmtName) {
var asmtUiPage = "assessment_take2";
var url = asmtUiPage + ".do";
url += "?sysparm_assessable_sysid=" + asmtInstanceSysId;
url += "&sysparm_assessable_type=" + changeRiskAsmtSysId;
url += "&sysparm_hide_header=true";
url += "&sysparm_hide_save=true";
url += "&sysparm_hide_cancel=true";
url += "&sysparm_hide_source_details=true";
url += "&sysparm_stack=no";
url += "&sysparm_return_url=" + getEncodedUrl(changeRequestSysId, asmtInstanceSysId);
g_modal.showFrame({
url: url,
title: 'JT Risk Assessments',
size: 'lg',
height: 1000,
});
}
function getEncodedUrl(changeRequestSysId, asmtInstanceSysId) {
var closeUiPage = "change_risk_asmt_close_dialog";
var url = "/" + closeUiPage + ".do";
url += "?sysparm_stack=no";
url += "&sysparm_id=" + changeRequestSysId;
url += "&sysparm_asmtInstanceSysId=" + asmtInstanceSysId;
return encodeURIComponent(url);
}
function onClick(g_form) {
viewCompleted();
}
function viewCompleted() {
var changeRequestSysId = g_form.getUniqueValue();
var tableName = g_form.getTableName();
var ga = new GlideAjax("ChangeRiskAsmtAjax");
ga.addParam("sysparm_name", "viewAssessmentAjax");
ga.addParam("sysparm_id", changeRequestSysId);
ga.addParam("sysparm_class", tableName);
ga.getXMLAnswer(function(answer) {
answer = JSON.parse(answer);
if (!answer || !answer.asmtComplete) {
g_form.addInfoMessage(getMessage("There are no completed risk assessments for this Change Request"));
} else {
var asmtInstanceSysId = answer.asmtInstanceSysId;
var changeRiskAsmtSysId = answer.changeRiskAsmtSysId;
var changeRequestSysId = answer.changeRequestSysId;
var riskAsmtName = answer.riskAsmtName;
_showCompletedAsmt(asmtInstanceSysId, changeRiskAsmtSysId, changeRequestSysId, riskAsmtName);
}
});
}
function _showCompletedAsmt(asmtInstanceSysId, changeRiskAsmtSysId, changeRequestSysId, riskAsmtName) {
g_form.hideAllFieldMsgs();
var asmtUiPage = "assessment_take2";
var url = asmtUiPage + ".do";
url += "?sysparm_assessable_sysid=" + asmtInstanceSysId;
url += "&sysparm_assessable_type=" + changeRiskAsmtSysId;
url += "&sysparm_reader_view=true";
url += "&sysparm_hide_header=true";
url += "&sysparm_hide_save=true";
url += "&sysparm_hide_cancel=true";
url += "&sysparm_hide_source_details=true";
url += "&sysparm_stack=no";
g_modal.showFrame({
url: url,
title: riskAsmtName,
size: 'lg',
height: 1000
});
}
function onClick(g_form) {
var fields = [];
var missingLabels = [];
if (g_form.hasField("start_date") && !g_form.getValue("start_date")) {
fields.push("start_date");
missingLabels.push(g_form.getLabelOf("start_date"));
}
if (g_form.hasField("end_date") && !g_form.getValue("end_date")) {
fields.push("end_date");
missingLabels.push(g_form.getLabelOf("end_date"));
}
if (g_form.hasField("cmdb_ci") && !g_form.getValue("cmdb_ci")) {
fields.push("cmdb_ci");
missingLabels.push(g_form.getLabelOf("cmdb_ci"));
}
if (missingLabels.length > 0) {
var msg = (missingLabels.length > 1) ?
"To check conflicts, the following fields need values: " + missingLabels.join(", ") :
"To check conflicts, the following field needs a value: " + missingLabels[0];
g_form.addErrorMessage(msg);
fields.forEach(function(field) {
g_form.showFieldMsg(field, "Required for conflict check", "error", false);
});
return;
}
g_form.clearMessages();
g_form.submit("check_conflicts");
}
function onClick(g_form) {
var fields = [];
var missingLabels = [];
if (g_form.hasField("start_date") && !g_form.getValue("start_date")) {
fields.push("start_date");
missingLabels.push(g_form.getLabelOf("start_date"));
}
if (g_form.hasField("end_date") && !g_form.getValue("end_date")) {
fields.push("end_date");
missingLabels.push(g_form.getLabelOf("end_date"));
}
if (g_form.hasField("cmdb_ci") && !g_form.getValue("cmdb_ci")) {
fields.push("cmdb_ci");
missingLabels.push(g_form.getLabelOf("cmdb_ci"));
}
if (missingLabels.length > 0) {
var msg = (missingLabels.length > 1) ?
"To check conflicts, the following fields need values: " + missingLabels.join(", ") :
"To check conflicts, the following field needs a value: " + missingLabels[0];
g_form.addErrorMessage(msg);
fields.forEach(function(field) {
g_form.showFieldMsg(field, "Required for conflict check", "error", false);
});
return;
}
g_form.clearMessages();
g_form.submit("check_conflicts");
}