How to delay a second confirmation dialog until just before GlideRecord update in a UI Action?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-19-2025 06:55 AM - edited 05-19-2025 08:05 AM
Hey guys!
As the title says, how do I delay the second confirmation dialog until just before GlideRecord update in a UI Action?
Here is what my UI Action looks like:
function cancelOrder() {
var errorMessages = [];
// Kontrollera att användaren fyllt i orsaken
var reason = g_form.getValue('cancellation_reason');
g_form.setDisplay('cancellation_reason', true);
g_form.setMandatory('cancellation_reason', true);
if (!reason) {
errorMessages.push('Du måste ange en orsak till annulleringen.');
}
// Kontrollera child tasks via GlideAjax
var ga = new GlideAjax('x_vgll_decom.CancelOrderAJAX');
ga.addParam('sysparm_name', 'checkChildTasks');
ga.addParam('sysparm_sys_id', g_form.getUniqueValue());
ga.getXMLAnswer(function(response) {
if (response !== 'OK') {
errorMessages.push('Avvecklingsärendet har fortfarande aktiva beställningar och går därför inte att avsluta');
}
if (errorMessages.length > 0) {
errorMessages.forEach(function(msg) {
g_form.addErrorMessage(msg);
});
return;
}
// Visa första bekräftelsen
var confirmation = confirm("Beställningar i ärendets aktiviteter måste annulleras manuellt först");
if (!confirmation) {
return;
}
// Visa andra bekräftelsen
var confirmation2 = confirm("Vill du verkligen annullera detta ärende?");
if (!confirmation2) {
return;
}
// Anropa servern för att annullera
var gaCancel = new GlideAjax('x_vgll_decom.CancelOrderAJAX');
gaCancel.addParam('sysparm_name', 'cancelOrder');
gaCancel.addParam('sysparm_sys_id', g_form.getUniqueValue());
gaCancel.getXMLAnswer(function(cancelResponse) {
if (cancelResponse === 'OK') {
g_form.clearModified();
g_form.refresh();
} else {
g_form.addErrorMessage('Kunde inte annullera beställningen: ' + cancelResponse);
}
});
});
}
Here is what my Script Includes looks like:
var CancelOrderAJAX = Class.create();
CancelOrderAJAX.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
// Kontrollera att alla child tasks är i state 3 eller 7
checkChildTasks: function() {
var sysId = this.getParameter('sysparm_sys_id');
var taskGR = new GlideRecord('x_vgll_decom_decommission_task');
taskGR.addQuery('parent', sysId);
taskGR.addQuery('state', 'NOT IN', '3,7');
taskGR.query();
if (taskGR.hasNext()) {
return 'Fel: Alla underliggande aktiviteter måste vara avslutade (state 3 eller 7)';
}
return 'OK';
},
// Avbryt ordern
cancelOrder: function() {
var sysId = this.getParameter('sysparm_sys_id');
gs.info('CancelOrderAJAX: Försöker avbryta order med sys_id: ' + sysId);
var gr = new GlideRecord('x_vgll_decom_decommission');
if (!gr.get(sysId)) {
gs.warn('CancelOrderAJAX: Kunde inte hitta posten med sys_id: ' + sysId);
return 'Fel: kunde inte hitta posten';
}
if (!gr.canWrite()) {
gs.warn('CancelOrderAJAX: Saknar rättigheter att uppdatera posten med sys_id: ' + sysId);
return 'Fel: saknar rättigheter att uppdatera posten';
}
gr.state = 5;
gr.decom_state = 'closed_abandoned';
gr.update();
gs.info('CancelOrderAJAX: Beställning avbruten för sys_id: ' + sysId);
return 'OK';
},
type: 'CancelOrderAJAX'
});
The problem is that the second confirmation dialog appears right after the first one.
An alternate solution is to showcase both errorMessages (listed below) in the banner simultaniously/at the same time:
- errorMessages.push('Avvecklingsärendet har fortfarande aktiva beställningar och går därför inte att avsluta');
- errorMessages.push('Du måste ange en orsak till annulleringen.');
In this case (alternate solution) I need only one dialogue.
Thanks in advance!

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-19-2025 08:12 AM
Hi,
I don't see any code to update the record in your script. If you want to update between those two dialogues, then call a glideAjax to update your record, have your second dialog inside getXMLAnswer function of the glideAjax
Thank you,
Palani
Palani