diff --git a/Client-Side Components/UI Pages/Edit Last WorkNotes/README.md b/Client-Side Components/UI Pages/Edit Last WorkNotes/README.md new file mode 100644 index 0000000000..c2d34c3d4b --- /dev/null +++ b/Client-Side Components/UI Pages/Edit Last WorkNotes/README.md @@ -0,0 +1,6 @@ +Edit Last Entered Work Notes/Additional comments + +This UI action is built specifically to edit the last entered work notes/ additional comments by the user in incident form or it can modified for any table which support this journal fields. + +There is some restriction around journal fields/ work notes as user cannot edit or adjust the work notes/additional comments that they entered. If they wish to edit it, I have introduced a new +UI action which calls the UI pages which will automatically populates the last entered work notes/comments and user can adjust and submit it. diff --git a/Client-Side Components/UI Pages/Edit Last WorkNotes/UIaction.js b/Client-Side Components/UI Pages/Edit Last WorkNotes/UIaction.js new file mode 100644 index 0000000000..26e5381269 --- /dev/null +++ b/Client-Side Components/UI Pages/Edit Last WorkNotes/UIaction.js @@ -0,0 +1,10 @@ +//Enable client set to true +//Enter Onclick value as function name openEditLastCommentModal() +//Enter form button as true +function openEditLastCommentModal() { + var dialog = new GlideModal("edit_worknotes_comments_inc"); + dialog.setTitle('Edit Last WorkNotes/Additional Comments'); + dialog.setPreference('incid', g_form.getUniqueValue()); + dialog.setWidth(550); + dialog.render(); +} diff --git a/Client-Side Components/UI Pages/Edit Last WorkNotes/scriptinclude.js b/Client-Side Components/UI Pages/Edit Last WorkNotes/scriptinclude.js new file mode 100644 index 0000000000..a9ce376a59 --- /dev/null +++ b/Client-Side Components/UI Pages/Edit Last WorkNotes/scriptinclude.js @@ -0,0 +1,74 @@ +var UpdateCommentsworkNotes = Class.create(); +UpdateCommentsworkNotes.prototype = Object.extendsObject(AbstractAjaxProcessor, { + + getIncLastWorknotes: function() { + var recordId = this.getParameter('sysparm_id'); + // Check if the record ID is provided and is not null or undefined + if (!recordId) { + gs.error("UpdateINCworkNotes.getIncLastWorknotes: No record ID (sysparm_id) provided."); + return ''; + } + + var grJournal = new GlideRecord("sys_journal_field"); + grJournal.addEncodedQuery("element_id=" + recordId + "^element=comments^ORelement=work_notes"); + grJournal.orderByDesc('sys_created_on'); + grJournal.setLimit(1); + grJournal.query(); + + if (grJournal.next()) { + return grJournal.getValue('value'); + } + + return ''; + }, + + updateCommentsLatest: function() { + var recordId = this.getParameter('sysparm_id'); + var newComment = this.getParameter('sysparm_newcomment'); + // Validate input parameters + if (!recordId || !newComment) { + gs.error("UpdateINCworkNotes.updateCommentsLatest: Missing required parameters (sysparm_id or sysparm_newcomment)."); + return "failure: Missing parameters."; + } + + // Update the latest journal entry for the incident + var grJournal = new GlideRecord("sys_journal_field"); + grJournal.addEncodedQuery("element_id=" + recordId + "^element=comments^ORelement=work_notes"); + grJournal.orderByDesc('sys_created_on'); + grJournal.setLimit(1); + grJournal.query(); + + if (grJournal.next()) { + grJournal.setValue('value', newComment); + grJournal.update(); + } else { + // Log if no journal field was found to update + gs.warn("UpdateINCworkNotes.updateCommentsLatest: No latest journal entry found for record ID: " + recordId); + } + + var grAudit = new GlideRecord("sys_audit"); + grAudit.addEncodedQuery("documentkey=" + recordId + "^fieldname=comments^ORfieldname=work_notes"); + grAudit.orderByDesc('sys_created_on'); + grAudit.setLimit(1); + grAudit.query(); + + if (grAudit.next()) { + grAudit.setValue('newvalue', newComment); + grAudit.setValue('oldvalue', ''); + grAudit.update(); + } else { + gs.warn("UpdateINCworkNotes.updateCommentsLatest: No latest audit entry found for record ID: " + recordId); + } + + var grHistorySet = new GlideRecord("sys_history_set"); + grHistorySet.addQuery("id", recordId); + grHistorySet.setLimit(1); + grHistorySet.query(); + + if (grHistorySet.next()) { + grHistorySet.deleteRecord(); + } + }, + + type: 'UpdateCommentsworkNotes' +}); diff --git a/Client-Side Components/UI Pages/Edit Last WorkNotes/uipage_client.html b/Client-Side Components/UI Pages/Edit Last WorkNotes/uipage_client.html new file mode 100644 index 0000000000..162855baf3 --- /dev/null +++ b/Client-Side Components/UI Pages/Edit Last WorkNotes/uipage_client.html @@ -0,0 +1,7 @@ + + +
+ + +
+
diff --git a/Client-Side Components/UI Pages/Edit Last WorkNotes/uipage_clientcode.js b/Client-Side Components/UI Pages/Edit Last WorkNotes/uipage_clientcode.js new file mode 100644 index 0000000000..f97145f823 --- /dev/null +++ b/Client-Side Components/UI Pages/Edit Last WorkNotes/uipage_clientcode.js @@ -0,0 +1,40 @@ +fetchLastComment(); + +function closeDialog() { + GlideDialogWindow.get().destroy(); + return false; +} + +function fetchLastComment() { + var dialogWindow = GlideDialogWindow.get(); + var incidentSysId = dialogWindow.getPreference('incid'); + var glideAjax = new GlideAjax('UpdateINCworkNotes'); + glideAjax.addParam('sysparm_name', 'getIncLastWorknotes'); + glideAjax.addParam('sysparm_id', incidentSysId); + glideAjax.getXMLAnswer(setCommentFieldValue); +} + +function setCommentFieldValue(answer) { + var commentField = document.getElementById('commenttext'); + if (commentField) { + commentField.value = answer || ''; + } +} + +function submitComment() { + var dialogWindow = GlideDialogWindow.get(); + var incidentSysId = dialogWindow.getPreference('incid'); + var newCommentText = document.getElementById('commenttext').value; + + var glideAjax = new GlideAjax('UpdateINCworkNotes'); + glideAjax.addParam('sysparm_name', 'updateCommentsLatest'); + glideAjax.addParam('sysparm_id', incidentSysId); + glideAjax.addParam('sysparm_newcomment', newCommentText); + + glideAjax.getXMLAnswer(handleSuccessfulSubmit); + closeDialog(); +} + +function handleSuccessfulSubmit(answer) { + window.location.reload(); +}