Skip to content

Commit 41f736e

Browse files
authored
Auto Save Draft Feature (#2584)
* Create Readme.md * Create Script include.JS * Create client script.js
1 parent 95ddb7d commit 41f736e

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
This project implements an Auto Save Draft feature for ServiceNow Catalog Items. It automatically saves the user’s progress (form variables) every few minutes to prevent data loss if the session times out or the browser closes. it Prevents data loss during long form filling.
2+
3+
4+
5+
features
6+
Auto-save catalog form data every 2 minutes.
7+
Stores draft data in a custom table.
8+
Restores saved data when the user reopens the catalog item.
9+
Works in Service Portal
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
var CatalogDraftUtils = Class.create();
2+
CatalogDraftUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
3+
saveDraft: function() {
4+
var userId = gs.getUserID();
5+
var catalogItem = this.getParameter('sysparm_catalog_item');
6+
var draftData = this.getParameter('sysparm_draft_data');
7+
8+
var gr = new GlideRecord('u_catalog_draft');
9+
gr.addQuery('user', userId);
10+
gr.addQuery('catalog_item', catalogItem);
11+
gr.query();
12+
if (gr.next()) {
13+
gr.variables_json = draftData;
14+
gr.last_saved = new GlideDateTime();
15+
gr.update();
16+
} else {
17+
gr.initialize();
18+
gr.user = userId;
19+
gr.catalog_item = catalogItem;
20+
gr.variables_json = draftData;
21+
gr.last_saved = new GlideDateTime();
22+
gr.insert();
23+
}
24+
return 'Draft saved successfully';
25+
},
26+
type: 'CatalogDraftUtils'
27+
});
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function onLoad() {
2+
console.log('Auto Save Draft initialized');
3+
4+
setInterval(function() {
5+
var draftData = {
6+
hardware_name: g_form.getValue('hardware_name'),
7+
quantity: g_form.getValue('quantity')
8+
};
9+
10+
var ga = new GlideAjax('CatalogDraftUtils');
11+
ga.addParam('sysparm_name', 'saveDraft');
12+
ga.addParam('sysparm_catalog_item', g_form.getValue('sys_id')); // Catalog item sys_id
13+
ga.addParam('sysparm_draft_data', JSON.stringify(draftData));
14+
15+
ga.getXMLAnswer(function(response) {
16+
console.log('Draft saved: ' + response);
17+
});
18+
}, 120000); // Every 2 minutes
19+
}

0 commit comments

Comments
 (0)