diff --git a/Client-Side Components/Catalog Client Script/Schedule Request/Readme.JS b/Client-Side Components/Catalog Client Script/Schedule Request/Readme.JS new file mode 100644 index 0000000000..6d5fe42ac6 --- /dev/null +++ b/Client-Side Components/Catalog Client Script/Schedule Request/Readme.JS @@ -0,0 +1 @@ +This project allows users to schedule a Service Catalog request for a future date and time. Instead of submitting immediately, the request is stored and automatically submitted later using a Scheduled Job diff --git a/Client-Side Components/Catalog Client Script/Schedule Request/scheduled client script.js b/Client-Side Components/Catalog Client Script/Schedule Request/scheduled client script.js new file mode 100644 index 0000000000..eaa13fa462 --- /dev/null +++ b/Client-Side Components/Catalog Client Script/Schedule Request/scheduled client script.js @@ -0,0 +1,17 @@ +function onSubmit() { + var scheduledTime = g_form.getValue('scheduled_time'); + var currentTime = new Date().toISOString(); + + if (scheduledTime > currentTime) { + var ga = new GlideAjax('ScheduledRequestHelper'); + ga.addParam('sysparm_name', 'storeScheduledRequest'); + ga.addParam('sysparm_item', g_form.getUniqueValue()); + ga.addParam('sysparm_time', scheduledTime); + ga.getXMLAnswer(function(response) { + alert('Your request has been scheduled for: ' + scheduledTime); + }); + return false; // Prevent immediate submission + } + + return true; // Submit immediately if time is now or past +} diff --git a/Client-Side Components/Catalog Client Script/Schedule Request/scheduled scriptinclude.JS b/Client-Side Components/Catalog Client Script/Schedule Request/scheduled scriptinclude.JS new file mode 100644 index 0000000000..15411e4561 --- /dev/null +++ b/Client-Side Components/Catalog Client Script/Schedule Request/scheduled scriptinclude.JS @@ -0,0 +1,15 @@ +var ScheduledRequestHelper = Class.create(); +ScheduledRequestHelper.prototype = Object.extendsObject(AbstractAjaxProcessor, { + storeScheduledRequest: function() { + var itemID = this.getParameter('sysparm_item'); + var scheduledTime = this.getParameter('sysparm_time'); + + var record = new GlideRecord('x_snc_scheduled_requests'); // Custom table + record.initialize(); + record.catalog_item = itemID; + record.scheduled_time = scheduledTime; + record.insert(); + + return 'Scheduled successfully'; + } +}); diff --git a/Client-Side Components/Catalog Client Script/Schedule Request/scheduled_job.JS b/Client-Side Components/Catalog Client Script/Schedule Request/scheduled_job.JS new file mode 100644 index 0000000000..102de236d2 --- /dev/null +++ b/Client-Side Components/Catalog Client Script/Schedule Request/scheduled_job.JS @@ -0,0 +1,14 @@ +var now = new GlideDateTime(); +var gr = new GlideRecord('x_snc_scheduled_requests'); +gr.addQuery('scheduled_time', '<=', now); +gr.query(); + +while (gr.next()) { + var request = new GlideRecord('sc_request'); + request.initialize(); + request.requested_for = gr.requested_for; + request.cat_item = gr.catalog_item; + request.insert(); + + gr.deleteRecord(); // Remove after submission +}