I need a UI Action with a progress bar to delete multiple records

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-28-2024 05:25 AM
Hello
I need an UI Action at core_company level that once clicked, will delete all records associated to the current company on the task, cmdb_ci, ast_service & sys_user tables.
I've created the following UI Action
function DeleteCustomerData() {
var answer = confirm("Are you sure you want to delete ALL DATA for this customer ?");
if (answer == true) {
// Show progress bar
showProgressBar();
// Call the server-side script
var ga = new GlideAjax('DeleteCustomerDataScript');
ga.addParam('sys_id', g_form.getUniqueValue());
ga.getXMLAnswer(function(response) {
var progressID = response.responseXML.documentElement.getAttribute('answer');
monitorProgress(progressID);
});
} else {
return false;
}
}
function monitorProgress(progressID) {
var intervalID = setInterval(function() {
var gr = new GlideRecord('sys_execution_tracker');
gr.get(progressID);
var percentage = gr.getValue('progress');
updateProgressBar(percentage);
if (percentage >= 100) {
clearInterval(intervalID);
document.getElementById("progressModal").style.display = "none";
gs.addInfoMessage("Data deletion complete.");
}
}, 1000);
}
Then, I've created two script includes :
var DeleteCustomerDataScriptScript = Class.create();
DeleteCustomerDataScriptScript.prototype = Object.extendsObject(AbstractAjaxProcessor, {
DeleteCustomerDataScript: function() {
var customerSysId = this.getParameter('sys_id');
var progressID = gs.generateGUID();
var worker = new GlideScriptedProgressWorker();
worker.setProgressName("Deleting Customer Data");
worker.setScriptIncludeName("DeleteCustomerDataScriptWorker");
worker.setScriptIncludeMethod("execute");
worker.putMethodArg("sys_id", customerSysId);
worker.setProgressID(progressID);
worker.start();
return progressID;
}
});
var DeleteCustomerDataWorker = Class.create();
DeleteCustomerDataWorker.prototype = {
initialize: function() {},
execute: function(progress, customerSysId) {
var customer = customerSysId;
var tables = ['sys_user', 'cmdb_ci', 'alm_asset', 'task', 'ast_service', 'core_company'];
var encodedQueries = ['company=' + customer, 'company=' + customer, 'company=' + customer, 'company=' + customer, 'u_company=' + customer, 'sys_id=' + customer];
var totalCount = 0;
for (var i = 0; i < tables.length; i++) {
var gr = new GlideRecord(tables[i]);
gr.addEncodedQuery(encodedQueries[i]);
gr.query();
totalCount += gr.getRowCount();
}
var deletedCount = 0;
for (var i = 0; i < tables.length; i++) {
var gr = new GlideRecord(tables[i]);
gr.addEncodedQuery(encodedQueries[i]);
gr.query();
while (gr.next()) {
gr.deleteRecord();
deletedCount++;
progress.setProgress((deletedCount / totalCount) * 100);
}
}
gs.addInfoMessage("All tickets for the current customer that are assigned to Test Queue are now closed");
},
type: 'DeleteCustomerDataWorker'
};
When I click , I get the popup that asks if I'm sure I want to delete everything, but nothing else happens.
Does someone got an idea on how I can make it work ?
Would be nice for my administrators to have that progress bar so they ensure it's indeed deleting..
Thanks
Jérôme
1 REPLY 1

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-29-2024 04:40 AM
Does someone has any idea ? 😞