Check Conflict to run with Request Approval (move to Assess) UI Action
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-20-2024 07:04 AM
I am trying to get the Check Conflict UI Action combined with the Request Approval (move to assess) UI action for Change Requests with the condition that if a conflict is detected, the script does not advance the state to Assess and it does not trigger approvals. At the moment the script I have does do the conflict checking but it still proceeds with changing the state to Assess and approvals are triggered. I am needing help getting the condition correct to prevent this when a conflict is detected. Script I have so far is attached below. Thanks.
function moveToAssess() {
// START MODIFICATIONS
// Check Conflict
var conflictMsg = $("conflict_msg");
if (conflictMsg) conflictMsg.remove();
var fields = "";
var i = 0;
if (g_form.getControl("start_date") && g_form.getValue("start_date") == "") {
fields += ", " + g_form.getLabelOf("start_date");
i++;
}
if (g_form.getControl("end_date") && g_form.getValue("end_date") == "") {
fields += ", " + g_form.getLabelOf("end_date");
i++;
}
if (g_form.getControl("cmdb_ci") && g_form.getValue("cmdb_ci") == "") {
fields += ", " + g_form.getLabelOf("cmdb_ci");
i++;
}
if (i > 1) {
g_form.addErrorMessage(formatMessage(getMessage("To check conflicts, the following fields need values: {0}"), fields.substring(2)), "conflict_msg");
return false;
} else if (i === 1) {
g_form.clearMessages();
g_form.addErrorMessage(formatMessage(getMessage("To check conflicts, the following field needs a value: {0}"), fields.substring(2)), "conflict_msg");
return false;
}
//Code that runs without 'onclick'
//Ensure call to server-side function with no browser errors
if (typeof window == 'undefined')
_checkConflicts();
if (g_form.getValue('conflict_status') == 'Conflict') {
return;
}
g_form.setValue("state", "-4");
gsftSubmit(null, g_form.getFormElement(), 'state_model_request_assess_approval');
}
// END MODIFICATIONS
if (typeof window == 'undefined')
updateAndRedirect();
function updateAndRedirect() {
current.update();
action.setRedirectURL(current);
}
function _checkConflicts() {
//Array which stores fields that dont have a value
var fieldArray = [];
//Put Start date label in array if it doesnt have a value
if (current.start_date.nil())
fieldArray.push(current.start_date.getLabel());
//Put End date label in array if it doesnt have a value
if (current.end_date.nil())
fieldArray.push(current.end_date.getLabel());
//Put CMDB CI label in array if it doesnt have a value
if (current.cmdb_ci.nil())
fieldArray.push(current.cmdb_ci.getLabel());
//If there are values stored in the array then print message
if (fieldArray.length > 0) {
var fieldMsg = '';
for (var i = 0; i < fieldArray.length; i++) {
fieldMsg += fieldArray[i] + ", ";
}
fieldMsg = fieldMsg.substring(0, fieldMsg.length - 2);
gs.addErrorMessage(gs.getMessage("To check conflicts, the following fields need values: {0}", fieldMsg));
current.update();
action.setRedirectURL(current);
return;
}
//else If there are NO values stored in the array execute the action
else if (fieldArray.length == 0) {
suppressMaintenanceScheduleMessages = true;
var conflictDetector = new ChangeCheckConflicts(current);
var conflictResults = conflictDetector.check();
current.conflict_status = 'No Conflict';
var msg;
if (conflictResults < 0)
msg = gs.getMessage('Configuration Item needed for conflict analysis');
else if (conflictResults == 0)
msg = gs.getMessage('There are <FONT COLOR="green">NO CONFLICTS</FONT>');
else {
msg = gs.getMessage('There <FONT COLOR="tomato">ARE CONFLICTS</FONT> - See "Conflicts" related list');
current.conflict_status = 'Conflict';
}
gs.addInfoMessage(msg);
current.update();
action.setRedirectURL(current);
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-20-2024 07:28 AM
Hi @beccintech
To resolve this, you need to stop the flow when a conflict is found. The main problem is that the state is changed regardless of conflict detection.
Try below script once:
function moveToAssess() {
// START MODIFICATIONS
// Check Conflict
var conflictMsg = $("conflict_msg");
if (conflictMsg) conflictMsg.remove();
var fields = "";
var i = 0;
if (g_form.getControl("start_date") && g_form.getValue("start_date") === "") {
fields += ", " + g_form.getLabelOf("start_date");
i++;
}
if (g_form.getControl("end_date") && g_form.getValue("end_date") === "") {
fields += ", " + g_form.getLabelOf("end_date");
i++;
}
if (g_form.getControl("cmdb_ci") && g_form.getValue("cmdb_ci") === "") {
fields += ", " + g_form.getLabelOf("cmdb_ci");
i++;
}
if (i > 1) {
g_form.addErrorMessage(formatMessage(getMessage("To check conflicts, the following fields need values: {0}"), fields.substring(2)), "conflict_msg");
return false;
} else if (i === 1) {
g_form.clearMessages();
g_form.addErrorMessage(formatMessage(getMessage("To check conflicts, the following field needs a value: {0}"), fields.substring(2)), "conflict_msg");
return false;
}
//Call server-side function to check conflicts
if (typeof window == 'undefined')
_checkConflicts();
// Prevent advancing if there's a conflict
if (g_form.getValue('conflict_status') === 'Conflict') {
g_form.addErrorMessage('Conflict detected. Cannot move to Assess.');
return false;
}
// Proceed if no conflict
g_form.setValue("state", "-4");
gsftSubmit(null, g_form.getFormElement(), 'state_model_request_assess_approval');
}
i hope my answer helps you to resolve your issue, if yes please mark my answer helpful and correct.
thank you
rajesh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-23-2024 08:20 AM
Hi @Rajesh Chopade1 , thanks for replying. I tried this and it didn't work. The UI Action completes the conflict check and still proceeds with moving the state to Assess and generating approval requests.