UI Action & Dialog Issue: decom_state Not Updating + Need Auto-Reload for Related List
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-21-2025 05:17 AM
Hey guys!
I have the following UI action script for a button visible in a form based on a custom table (x_vgll_decom_decommission):
function invokeCancelDecommissionDialog() {
var ga = new GlideAjax('x_vgll_decom.DecommissionUtils');
ga.addParam('sysparm_name', 'canCloseDecommission');
ga.addParam('sysparm_parent_id', g_form.getUniqueValue());
ga.getXMLAnswer(function(response) {
if (response === 'true') {
var dialog = new GlideDialogWindow('x_vgll_decom_cancel_decommission_dialog');
dialog.setTitle('Ange orsak till annullering');
dialog.setPreference('onOKCallback', function(reasonFromDialog) {
if (confirm("Vill du verkligen annullera detta ärende med angiven orsak?")) {
var updateGA = new GlideAjax('x_vgll_decom.DecommissionUtils');
updateGA.addParam('sysparm_name', 'cancelDecommission');
updateGA.addParam('sysparm_parent_id', g_form.getUniqueValue());
updateGA.addParam('sysparm_reason', reasonFromDialog);
updateGA.getXMLAnswer(function(result) {
if (result === 'success') {
// Vänta lite innan formuläret laddas om
setTimeout(function() {
g_form.reload();
}, 500);
} else {
g_form.addErrorMessage('Kunde inte annullera ärendet. Försök igen.');
}
});
}
});
dialog.render();
} else {
g_form.addErrorMessage('Alla aktiviteter måste vara i status "Avslutad" eller "Stängd överhoppad" innan ärendet kan annulleras.');
}
});
}
I have the following Script Include:
var DecommissionUtils = Class.create();
DecommissionUtils.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
// Tillåt alltid dialogen att visas
canCloseDecommission: function() {
return 'true';
},
// Annullera ärende och sätt alla child tasks till state = 6
cancelDecommission: function() {
var parentId = this.getParameter('sysparm_parent_id');
var reason = this.getParameter('sysparm_reason');
// Hämta parent (x_vgll_decom_decommission)
var gr = new GlideRecord('x_vgll_decom_decommission');
if (gr.get(parentId)) {
// Viktigt: sätt decom_state före state för att undvika att ev. BR nollställer det
gr.setValue('decom_state', 'closed_abandoned'); // Parent: decom_state
gr.setValue('state', '5'); // Parent: state = 5 (Annullerad)
gr.setValue('cancellation_reason', reason);
gr.update();
// Hämta och uppdatera child tasks (x_vgll_decom_decommission_task)
var taskGR = new GlideRecord('x_vgll_decom_decommission_task');
taskGR.addQuery('decommission', parentId); // Koppling till parent
taskGR.query();
while (taskGR.next()) {
taskGR.setValue('state', '6'); // Child: state = 6 (Avbruten)
taskGR.update();
}
return 'success';
}
return 'error';
}
});
I have tried to create a UI Page in the form of a modal pop-up that requires user to fill in 'cancellation_reason' (field on parent) value.
I have the following UI Page with this HTML code:
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<g:ui_form>
<table width="100%">
<tr>
<td>
<g:ui_multiline_input_field name="dialog_cancellation_reason" id="dialog_cancellation_reason" label="${gs.getMessage('Annulleringsorsak')}" mandatory="true" />
<div id="dialog_error_message" style="color: red; display: none; margin-top: 5px;"></div>
</td>
</tr>
<tr>
<td colspan="2" align="right" style="padding-top: 10px;">
<g:dialog_buttons_ok_cancel ok="return onOK();" cancel="return onCancel();" ok_id="ok_button" ok_text="${gs.getMessage('OK')}" cancel_text="${gs.getMessage('Avbryt')}"/>
</td>
</tr>
</table>
</g:ui_form>
</j:jelly>
And the following UI Page Client script:
function onCancel() {
GlideDialogWindow.get().destroy();
return false;
}
function onOK() {
var reasonField = gel('dialog_cancellation_reason');
var reason = reasonField.value;
var errorMessageElement = gel('dialog_error_message');
if (!reason || reason.trim() === '') {
errorMessageElement.innerHTML = 'Du måste ange en orsak till annulleringen.';
errorMessageElement.style.display = 'block';
reasonField.focus();
return false;
}
errorMessageElement.style.display = 'none';
var onOKCallback = GlideDialogWindow.get().getPreference('onOKCallback');
if (typeof onOKCallback === 'function') {
onOKCallback(reason);
}
GlideDialogWindow.get().destroy();
return false;
}
So the Business Requirement is that field 'decom_state' (on parent) gets value 'closed_abandoned' + field 'state' (on parent) gets value 5 (for closed).
Another requirement is that the field 'state' on child (x_vgll_decom_decommission_task) gets value 6.
In my case, the decom_state stays unchanged for some weird reason and I also need to reload the page manually in order to see the changes in the related list below, after pressing OK in the dialog popup.
I want to reload the page after I press OK dialog popup automatically. So that the user can see the changes in value for the child in the related list seen below:
Thanks in advance!

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-21-2025 05:52 AM
Add the command location.reload() in UI Page Client script as below:
function onCancel() {
GlideDialogWindow.get().destroy();
return false;
}
function onOK() {
var reasonField = gel('dialog_cancellation_reason');
var reason = reasonField.value;
var errorMessageElement = gel('dialog_error_message');
if (!reason || reason.trim() === '') {
errorMessageElement.innerHTML = 'Du måste ange en orsak till annulleringen.';
errorMessageElement.style.display = 'block';
reasonField.focus();
location.reload(); // ---------- This command will reload the page
return false;
}
errorMessageElement.style.display = 'none';
var onOKCallback = GlideDialogWindow.get().getPreference('onOKCallback');
if (typeof onOKCallback === 'function') {
onOKCallback(reason);
}
GlideDialogWindow.get().destroy();
return false;
}
Palani
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-22-2025 12:50 AM
@palanikumar it did not work. 😞
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-22-2025 05:02 AM
@palanikumar It did work now that I put after the onOkCallback! Thank you!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-21-2025 11:54 AM
Hi, check this article for refreshing related list
Reload a Form or Related list from a Client Script - ServiceNow Guru