diff --git a/Modern Development/Service Portal Widgets/My Reminders/README.md b/Modern Development/Service Portal Widgets/My Reminders/README.md new file mode 100644 index 0000000000..39b217f69b --- /dev/null +++ b/Modern Development/Service Portal Widgets/My Reminders/README.md @@ -0,0 +1,31 @@ +# Service Portal Reminder Widget + +A simple custom ServiceNow Service Portal widget for viewing and creating personal reminders. + +## Features + +- This uses **ServiceNow's OOB Reminder table**. Table name : 'reminder' +- Displays a list of reminders for the current user. +- Provides a form to create new reminders. +- Allows associating reminders with any Task record. +- Auto-refreshes the list after a new reminder is created. + + +## How to create + +1. Navigate to **Service Portal > Widgets**. +2. Click **Create a new widget**. +3. Set the **Widget Name** (e.g. 'My Reminders') and **ID** (e.g., 'reminder-widget'). +4. Copy and paste the provided HTML, CSS, Client Script, and Server Script into their respective tabs. +5. Save the widget. + +## How to Use + +1. Open your target portal page in the Service Portal Designer. +2. Find your widget in the "Widgets" filter on the left. +3. Drag and dropp the widget onto the page. + +## Screenshots +image +image + diff --git a/Modern Development/Service Portal Widgets/My Reminders/reminders.html b/Modern Development/Service Portal Widgets/My Reminders/reminders.html new file mode 100644 index 0000000000..9688cb7ca0 --- /dev/null +++ b/Modern Development/Service Portal Widgets/My Reminders/reminders.html @@ -0,0 +1,85 @@ +
+
+

My Reminders

+
+
+
+ You have no active reminders. +
+ + + +
+ +
+

Create a New Reminder

+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+ + +
+ +
+ +
+
+
+
+
diff --git a/Modern Development/Service Portal Widgets/My Reminders/reminders.scss b/Modern Development/Service Portal Widgets/My Reminders/reminders.scss new file mode 100644 index 0000000000..29ddb182ab --- /dev/null +++ b/Modern Development/Service Portal Widgets/My Reminders/reminders.scss @@ -0,0 +1,29 @@ +.reminder-item { + border-left: 4px solid #337ab7; + margin-bottom: 10px; + padding: 10px 15px; +} + +.reminder-item h4 { + margin-top: 0; + font-weight: bold; + color: #333; +} + +.reminder-item p { + margin-bottom: 5px; +} + +.reminder-form-container { + margin-top: 20px; + padding-top: 15px; + border-top: 1px solid #eee; +} + +.form-group { + margin-bottom: 15px; +} + +.panel-heading + .panel-body { + padding-top: 20px; +} diff --git a/Modern Development/Service Portal Widgets/My Reminders/reminders_client.js b/Modern Development/Service Portal Widgets/My Reminders/reminders_client.js new file mode 100644 index 0000000000..2718887094 --- /dev/null +++ b/Modern Development/Service Portal Widgets/My Reminders/reminders_client.js @@ -0,0 +1,42 @@ +function($scope) { + var c = this; + + // Object to hold data for the new reminder form + c.newReminder = {}; + + // Special object for the sn-record-picker directive + c.taskField = { + displayValue: '', + value: '', + name: 'task' + }; + + // Function to submit the new reminder + c.createReminder = function() { + // Check if the form is valid before submitting + if ($scope.reminderForm.$invalid) { + return; + } + + // Set the task sys_id from the record picker into our submission object + c.newReminder.task = c.taskField.value; + c.data.newReminder = c.newReminder; + + // Set an action for the server to identify the request + c.data.action = 'create_reminder'; + + // Call the server script to insert the record + c.server.update().then(function(response) { + // Clear the action and the form model after successful submission + c.data.action = undefined; + c.newReminder = {}; + c.taskField.displayValue = ''; + c.taskField.value = ''; + + // Refresh the reminder list by reloading server data + c.server.get().then(function(response) { + c.data = response.data; + }); + }); + }; +} diff --git a/Modern Development/Service Portal Widgets/My Reminders/reminders_server.js b/Modern Development/Service Portal Widgets/My Reminders/reminders_server.js new file mode 100644 index 0000000000..4c8dfe0d90 --- /dev/null +++ b/Modern Development/Service Portal Widgets/My Reminders/reminders_server.js @@ -0,0 +1,38 @@ +(function() { + + var currentUserId = gs.getUserID(); + data.reminders = []; + + + if (input && input.action === 'create_reminder') { + var newReminder = new GlideRecord('reminder'); + newReminder.initialize(); + newReminder.setValue('user', currentUserId); + newReminder.setValue('task', input.newReminder.task); + newReminder.setValue('subject', input.newReminder.subject); + newReminder.setValue('notes', input.newReminder.notes); + newReminder.setValue('remind_me', input.newReminder.remind_me); + newReminder.setValue('field', input.newReminder.field); + newReminder.setValue('using', input.newReminder.using); + newReminder.insert(); + } + + + var reminderGR = new GlideRecord('reminder'); + reminderGR.addQuery('user', currentUserId); + reminderGR.orderByDesc('sys_created_on'); // Show newest first + reminderGR.query(); + + while (reminderGR.next()) { + var reminderObj = {}; + reminderObj.sys_id = reminderGR.getUniqueValue(); + reminderObj.subject = reminderGR.getValue('subject'); + reminderObj.notes = reminderGR.getValue('notes'); + reminderObj.remind_me = reminderGR.getValue('remind_me'); + reminderObj.field_display = reminderGR.getDisplayValue('field'); // Get user-friendly display value + reminderObj.using = reminderGR.getValue('using'); + reminderObj.task_display = reminderGR.getDisplayValue('task'); // Get task number/display value + data.reminders.push(reminderObj); + } + +})();