<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>question Re: Reject button in custom Service Portal widget not recognizing textarea input in ITSM forum</title>
    <link>https://www.servicenow.com/community/itsm-forum/reject-button-in-custom-service-portal-widget-not-recognizing/m-p/3324679#M544022</link>
    <description>&lt;P&gt;Hi everyone,&lt;BR /&gt;i was able to figure out how to build a &lt;STRONG&gt;custom Service Portal widget&lt;/STRONG&gt; that allows end users to &lt;STRONG&gt;accept or reject the resolution of an Incident&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;When an incident is moved to the &lt;STRONG&gt;Resolved&lt;/STRONG&gt; state, the widget appears to the user.&lt;BR /&gt;They can either:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Accept the solution&lt;/STRONG&gt;, which automatically closes the incident, or&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Reject the solution&lt;/STRONG&gt;, by providing a reason — which then reopens the incident.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;BR /&gt;HTML:&lt;/P&gt;&lt;P&gt;&amp;lt;div ng-if="data.showWidget &amp;amp;&amp;amp; !data.actionTaken" class="panel panel-default p-3"&amp;gt;&lt;BR /&gt;&amp;lt;h4 class="widget-heading text-primary"&amp;gt;Was the solution helpful?&amp;lt;/h4&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;div class="d-flex flex-column align-items-start"&amp;gt;&lt;BR /&gt;&amp;lt;button class="btn btn-success mb-2 widget-button" ng-click="acceptSolution()"&amp;gt;&lt;BR /&gt;Accept Solution&lt;BR /&gt;&amp;lt;/button&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;button class="btn btn-danger widget-button" ng-click="showRejectModal()"&amp;gt;&lt;BR /&gt;Reject Solution&lt;BR /&gt;&amp;lt;/button&amp;gt;&lt;BR /&gt;&amp;lt;/div&amp;gt;&lt;BR /&gt;&amp;lt;/div&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;div ng-if="data.actionTaken"&amp;gt;&lt;BR /&gt;&amp;lt;p&amp;gt;{{ data.message }}&amp;lt;/p&amp;gt;&lt;BR /&gt;&amp;lt;/div&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;div class="modal-backdrop" ng-if="showModal"&amp;gt;&lt;BR /&gt;&amp;lt;div class="modal-content-box p-3" style="background: white; border-radius: 6px; max-width: 500px; margin: 100px auto;"&amp;gt;&lt;BR /&gt;&amp;lt;form name="rejectForm" novalidate ng-submit="submitRejection()"&amp;gt;&lt;BR /&gt;&amp;lt;h5 class="mb-2"&amp;gt;Please tell us why you're rejecting the solution&amp;lt;/h5&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;textarea ng-model="data.rejectionReason"&lt;BR /&gt;class="form-control"&lt;BR /&gt;rows="4"&lt;BR /&gt;required&lt;BR /&gt;placeholder="Enter your reason..."&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;lt;div class="modal-buttons mt-3 d-flex justify-content-end"&amp;gt;&lt;BR /&gt;&amp;lt;button type="button" class="btn btn-secondary mr-2" ng-click="closeModal()"&amp;gt;Cancel&amp;lt;/button&amp;gt;&lt;BR /&gt;&amp;lt;button type="submit" class="btn btn-primary widget-button" ng-disabled="rejectForm.$invalid"&amp;gt;Submit&amp;lt;/button&amp;gt;&lt;BR /&gt;&amp;lt;/div&amp;gt;&lt;BR /&gt;&amp;lt;/form&amp;gt;&lt;BR /&gt;&amp;lt;/div&amp;gt;&lt;BR /&gt;&amp;lt;/div&amp;gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;CSS:&lt;/P&gt;&lt;P&gt;/* === Panel/Card === */&lt;BR /&gt;.panel {&lt;BR /&gt;border: none;&lt;BR /&gt;border-radius: 10px;&lt;BR /&gt;background-color: #ffffff;&lt;BR /&gt;padding: 20px;&lt;BR /&gt;box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Heading === */&lt;BR /&gt;.widget-heading {&lt;BR /&gt;font-weight: 600;&lt;BR /&gt;margin-bottom: 15px;&lt;BR /&gt;color: var(--brand-primary, #007bff); /* Use portal theme color or fallback to Bootstrap blue */&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Base Button === */&lt;BR /&gt;.btn {&lt;BR /&gt;width: 100%;&lt;BR /&gt;max-width: 300px;&lt;BR /&gt;font-weight: 600;&lt;BR /&gt;padding: 10px;&lt;BR /&gt;font-size: 14px;&lt;BR /&gt;border-radius: 8px;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.mb-2 {&lt;BR /&gt;margin-bottom: 10px;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Custom Widget Button Enhancements === */&lt;BR /&gt;.widget-button {&lt;BR /&gt;width: 100%;&lt;BR /&gt;max-width: 300px;&lt;BR /&gt;font-weight: 600;&lt;BR /&gt;padding: 10px 20px;&lt;BR /&gt;font-size: 15px;&lt;BR /&gt;border-radius: 8px;&lt;BR /&gt;box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);&lt;BR /&gt;transition: all 0.2s ease-in-out;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.widget-button:hover {&lt;BR /&gt;transform: translateY(-1px);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Force Button Colors (Overrides Theme) === */&lt;BR /&gt;.btn-success.widget-button {&lt;BR /&gt;background-color: #28a745 !important;&lt;BR /&gt;border-color: #28a745 !important;&lt;BR /&gt;color: #fff !important;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.btn-danger.widget-button {&lt;BR /&gt;background-color: #dc3545 !important;&lt;BR /&gt;border-color: #dc3545 !important;&lt;BR /&gt;color: #fff !important;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.btn-success.widget-button:hover {&lt;BR /&gt;background-color: #218838 !important;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.btn-danger.widget-button:hover {&lt;BR /&gt;background-color: #c82333 !important;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Modal Overlay === */&lt;BR /&gt;.modal-backdrop {&lt;BR /&gt;position: fixed;&lt;BR /&gt;top: 0;&lt;BR /&gt;left: 0;&lt;BR /&gt;width: 100%;&lt;BR /&gt;height: 100%;&lt;BR /&gt;background-color: rgba(0, 0, 0, 0.6);&lt;BR /&gt;z-index: 1000;&lt;BR /&gt;display: flex;&lt;BR /&gt;align-items: center;&lt;BR /&gt;justify-content: center;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Modal Content Box === */&lt;BR /&gt;.modal-content-box {&lt;BR /&gt;background-color: #fff;&lt;BR /&gt;padding: 25px;&lt;BR /&gt;border-radius: 10px;&lt;BR /&gt;width: 500px;&lt;BR /&gt;max-width: 90%;&lt;BR /&gt;box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Modal Buttons Layout === */&lt;BR /&gt;.modal-buttons {&lt;BR /&gt;display: flex;&lt;BR /&gt;justify-content: flex-end;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Textarea === */&lt;BR /&gt;textarea.form-control {&lt;BR /&gt;width: 100%;&lt;BR /&gt;resize: vertical;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.btn-primary.widget-button {&lt;BR /&gt;background-color: var(--brand-primary, #007bff) !important;&lt;BR /&gt;border-color: var(--brand-primary, #007bff) !important;&lt;BR /&gt;color: #fff !important;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.btn-primary.widget-button:hover {&lt;BR /&gt;background-color: #0069d9 !important;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Client script:&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;($scope) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.showModal = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.rejectionReason = &lt;/SPAN&gt;&lt;SPAN&gt;''&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.acceptSolution = &lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;SPAN&gt; ga = &lt;/SPAN&gt;&lt;SPAN&gt;new&lt;/SPAN&gt; &lt;SPAN&gt;GlideAjax&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;'SolutionFeedbackHandler'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_name'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'processFeedback'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_incident_id'&lt;/SPAN&gt;&lt;SPAN&gt;, $scope.data.sys_id);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_action'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'accept'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_comment'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;''&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.getXMLAnswer(&lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;(response) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (response === &lt;/SPAN&gt;&lt;SPAN&gt;'success'&lt;/SPAN&gt;&lt;SPAN&gt;) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.$apply(&lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.data.message = &lt;/SPAN&gt;&lt;SPAN&gt;"Thank you! The incident is now closed."&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.data.actionTaken = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;});&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;} &lt;/SPAN&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;alert(&lt;/SPAN&gt;&lt;SPAN&gt;"Failed: "&lt;/SPAN&gt;&lt;SPAN&gt; + response);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;});&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.showRejectModal = &lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.rejectionReason = &lt;/SPAN&gt;&lt;SPAN&gt;''&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.showModal = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.closeModal = &lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.rejectionReason = &lt;/SPAN&gt;&lt;SPAN&gt;''&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.showModal = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.data.rejectionReason = &lt;/SPAN&gt;&lt;SPAN&gt;''&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.submitRejection = &lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;SPAN&gt; comment = ($scope.data.rejectionReason || &lt;/SPAN&gt;&lt;SPAN&gt;""&lt;/SPAN&gt;&lt;SPAN&gt;).trim();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;console.log(&lt;/SPAN&gt;&lt;SPAN&gt;"DEBUG: comment ="&lt;/SPAN&gt;&lt;SPAN&gt;, comment);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (comment === &lt;/SPAN&gt;&lt;SPAN&gt;""&lt;/SPAN&gt;&lt;SPAN&gt;) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;alert(&lt;/SPAN&gt;&lt;SPAN&gt;"Please enter a reason for rejection."&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;SPAN&gt; ga = &lt;/SPAN&gt;&lt;SPAN&gt;new&lt;/SPAN&gt; &lt;SPAN&gt;GlideAjax&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;'SolutionFeedbackHandler'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_name'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'processFeedback'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_incident_id'&lt;/SPAN&gt;&lt;SPAN&gt;, $scope.data.sys_id);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_action'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'reject'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_comment'&lt;/SPAN&gt;&lt;SPAN&gt;, comment);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.getXMLAnswer(&lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;(response) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (response === &lt;/SPAN&gt;&lt;SPAN&gt;'success'&lt;/SPAN&gt;&lt;SPAN&gt;) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.$apply(&lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.data.message = &lt;/SPAN&gt;&lt;SPAN&gt;"Thanks! The incident has been reopened."&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.data.actionTaken = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.showModal = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;});&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;} &lt;/SPAN&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;alert(&lt;/SPAN&gt;&lt;SPAN&gt;"Failed: "&lt;/SPAN&gt;&lt;SPAN&gt; + response);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;});&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;BR /&gt;&lt;BR /&gt;Server script:&lt;BR /&gt;&lt;/SPAN&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;data.sys_id = $sp.getParameter(&lt;/SPAN&gt;&lt;SPAN&gt;"sys_id"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;data.showWidget = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;SPAN&gt; gr = &lt;/SPAN&gt;&lt;SPAN&gt;new&lt;/SPAN&gt; &lt;SPAN&gt;GlideRecord&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;'incident'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (gr.&lt;/SPAN&gt;&lt;SPAN&gt;get&lt;/SPAN&gt;&lt;SPAN&gt;(data.sys_id) &amp;amp;&amp;amp; gr.state == &lt;/SPAN&gt;&lt;SPAN&gt;6&lt;/SPAN&gt;&lt;SPAN&gt;) { &lt;/SPAN&gt;&lt;SPAN&gt;// 6 = Resolved&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;data.showWidget = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;})();&lt;BR /&gt;&lt;BR /&gt;Screenshots of the output of the widget are below&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;Feel free to use the widget as needed or suggest the best modification which makes functionality more dynamic for other tables.&lt;BR /&gt;&lt;BR /&gt;Please click helpful if you use it&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PuneetHegde1_0-1752761204764.png" style="width: 400px;"&gt;&lt;img src="https://www.servicenow.com/community/image/serverpage/image-id/456579iD7F0F14C4BA3AF6C/image-size/medium?v=v2&amp;amp;px=400" role="button" title="PuneetHegde1_0-1752761204764.png" alt="PuneetHegde1_0-1752761204764.png" /&gt;&lt;/span&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PuneetHegde1_1-1752761233625.png" style="width: 400px;"&gt;&lt;img src="https://www.servicenow.com/community/image/serverpage/image-id/456580iA4B9E12A976D0BFF/image-size/medium?v=v2&amp;amp;px=400" role="button" title="PuneetHegde1_1-1752761233625.png" alt="PuneetHegde1_1-1752761233625.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Thank you,&lt;BR /&gt;Puneet Hegde&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
    <pubDate>Thu, 17 Jul 2025 14:09:14 GMT</pubDate>
    <dc:creator>Puneet Hegde1</dc:creator>
    <dc:date>2025-07-17T14:09:14Z</dc:date>
    <item>
      <title>Reject button in custom Service Portal widget not recognizing textarea input</title>
      <link>https://www.servicenow.com/community/itsm-forum/reject-button-in-custom-service-portal-widget-not-recognizing/m-p/3324235#M543988</link>
      <description>&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;I'm building a custom Service Portal widget that allows users to either &lt;STRONG&gt;accept or reject a proposed solution&lt;/STRONG&gt; on an incident record when it's in the &lt;STRONG&gt;Resolved&lt;/STRONG&gt; state.&lt;/P&gt;&lt;P&gt;The &lt;STRONG&gt;"Accept Solution"&lt;/STRONG&gt; button works perfectly and updates the incident state to &lt;STRONG&gt;Closed&lt;/STRONG&gt;.&lt;BR /&gt;However, when clicking the &lt;STRONG&gt;"Reject Solution"&lt;/STRONG&gt; button, a modal pops up with a textarea for the user to enter a rejection reason. The form has a submit button which should call submitRejection().&lt;/P&gt;&lt;P&gt;Here’s the issue:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;Even after entering text into the textarea, the script always thinks the comment is empty. It keeps showing the alert:&lt;/P&gt;&lt;P&gt;"Please enter a reason for rejection."&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please find the blow client script in widget is where i'm having problem:&lt;/P&gt;&lt;P&gt;function($scope) {&lt;BR /&gt;$scope.showModal = false;&lt;BR /&gt;$scope.rejectionReason = '';&lt;/P&gt;&lt;P&gt;// Accept Solution (unchanged)&lt;BR /&gt;$scope.acceptSolution = function() {&lt;BR /&gt;var ga = new GlideAjax('SolutionFeedbackHandler');&lt;BR /&gt;ga.addParam('sysparm_name', 'processFeedback');&lt;BR /&gt;ga.addParam('sysparm_incident_id', $scope.data.sys_id);&lt;BR /&gt;ga.addParam('sysparm_action', 'accept');&lt;BR /&gt;ga.addParam('sysparm_comment', ''); // Empty for accept&lt;/P&gt;&lt;P&gt;ga.getXMLAnswer(function(response) {&lt;BR /&gt;if (response === 'success') {&lt;BR /&gt;$scope.$apply(function() {&lt;BR /&gt;$scope.data.message = "Thank you! The incident is now closed.";&lt;BR /&gt;$scope.data.actionTaken = true;&lt;BR /&gt;});&lt;BR /&gt;} else {&lt;BR /&gt;alert("Failed: " + response);&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;// Open Reject Modal&lt;BR /&gt;$scope.showRejectModal = function() {&lt;BR /&gt;$scope.rejectionReason = '';&lt;BR /&gt;$scope.showModal = true;&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;// Close Reject Modal&lt;BR /&gt;$scope.closeModal = function() {&lt;BR /&gt;$scope.rejectionReason = '';&lt;BR /&gt;$scope.showModal = false;&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;// Force model sync on change&lt;BR /&gt;$scope.updateRejectionReason = function() {&lt;BR /&gt;if (!$scope.$$phase) {&lt;BR /&gt;$scope.$apply();&lt;BR /&gt;}&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;// Submit Rejection&lt;BR /&gt;$scope.submitRejection = function() {&lt;BR /&gt;var comment = ($scope.rejectionReason || '').trim();&lt;/P&gt;&lt;P&gt;console.log("DEBUG: rejectionReason = [" + comment + "]");&lt;/P&gt;&lt;P&gt;if (!comment) {&lt;BR /&gt;alert("Please enter a reason for rejection.");&lt;BR /&gt;return;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;var ga = new GlideAjax('SolutionFeedbackHandler');&lt;BR /&gt;ga.addParam('sysparm_name', 'processFeedback');&lt;BR /&gt;ga.addParam('sysparm_incident_id', $scope.data.sys_id);&lt;BR /&gt;ga.addParam('sysparm_action', 'reject');&lt;BR /&gt;ga.addParam('sysparm_comment', comment);&lt;/P&gt;&lt;P&gt;ga.getXMLAnswer(function(response) {&lt;BR /&gt;if (response === 'success') {&lt;BR /&gt;$scope.$apply(function() {&lt;BR /&gt;$scope.data.message = "Thanks! The incident has been reopened.";&lt;BR /&gt;$scope.data.actionTaken = true;&lt;BR /&gt;$scope.showModal = false;&lt;BR /&gt;});&lt;BR /&gt;} else {&lt;BR /&gt;alert("Failed: " + response);&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;};&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 17 Jul 2025 10:38:12 GMT</pubDate>
      <guid>https://www.servicenow.com/community/itsm-forum/reject-button-in-custom-service-portal-widget-not-recognizing/m-p/3324235#M543988</guid>
      <dc:creator>Puneet Hegde1</dc:creator>
      <dc:date>2025-07-17T10:38:12Z</dc:date>
    </item>
    <item>
      <title>Re: Reject button in custom Service Portal widget not recognizing textarea input</title>
      <link>https://www.servicenow.com/community/itsm-forum/reject-button-in-custom-service-portal-widget-not-recognizing/m-p/3324274#M543991</link>
      <description>&lt;P&gt;Hi &lt;a href="https://www.servicenow.com/community/user/viewprofilepage/user-id/293149"&gt;@Puneet Hegde1&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In submit rejection function replace the line '&lt;SPAN&gt;var comment = ($scope.rejectionReason || '').trim();' with&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;var comment =($scope.rejectiontReason || "").trim();&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Try it.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Did you check after logging the value of $scope.rejectionReason&amp;nbsp; or comment is it printing the values as entered in pop up. It should log the value entered in pop up.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;One more thing, replace if(!comment) with if(comment&amp;nbsp; == "")&amp;nbsp; =&amp;gt;if comment is blank then it will give pop up with "Please enter the reason for rejection".&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Bhimashankar&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;------------------------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;If my response points you in the right directions, please consider marking it as 'Helpful'. Thanks!&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 17 Jul 2025 11:09:33 GMT</pubDate>
      <guid>https://www.servicenow.com/community/itsm-forum/reject-button-in-custom-service-portal-widget-not-recognizing/m-p/3324274#M543991</guid>
      <dc:creator>Bhimashankar H</dc:creator>
      <dc:date>2025-07-17T11:09:33Z</dc:date>
    </item>
    <item>
      <title>Re: Reject button in custom Service Portal widget not recognizing textarea input</title>
      <link>https://www.servicenow.com/community/itsm-forum/reject-button-in-custom-service-portal-widget-not-recognizing/m-p/3324487#M544009</link>
      <description>&lt;P&gt;Dear&amp;nbsp;&lt;STRONG&gt;Bhimashankar,&lt;BR /&gt;Yes, I have tried logging the value, but that also returns blank, as any input provided is not at all considered&lt;BR /&gt;&lt;BR /&gt;Thank you,&lt;BR /&gt;Puneet&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 17 Jul 2025 12:44:11 GMT</pubDate>
      <guid>https://www.servicenow.com/community/itsm-forum/reject-button-in-custom-service-portal-widget-not-recognizing/m-p/3324487#M544009</guid>
      <dc:creator>Puneet Hegde1</dc:creator>
      <dc:date>2025-07-17T12:44:11Z</dc:date>
    </item>
    <item>
      <title>Re: Reject button in custom Service Portal widget not recognizing textarea input</title>
      <link>https://www.servicenow.com/community/itsm-forum/reject-button-in-custom-service-portal-widget-not-recognizing/m-p/3324679#M544022</link>
      <description>&lt;P&gt;Hi everyone,&lt;BR /&gt;i was able to figure out how to build a &lt;STRONG&gt;custom Service Portal widget&lt;/STRONG&gt; that allows end users to &lt;STRONG&gt;accept or reject the resolution of an Incident&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;When an incident is moved to the &lt;STRONG&gt;Resolved&lt;/STRONG&gt; state, the widget appears to the user.&lt;BR /&gt;They can either:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Accept the solution&lt;/STRONG&gt;, which automatically closes the incident, or&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Reject the solution&lt;/STRONG&gt;, by providing a reason — which then reopens the incident.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;BR /&gt;HTML:&lt;/P&gt;&lt;P&gt;&amp;lt;div ng-if="data.showWidget &amp;amp;&amp;amp; !data.actionTaken" class="panel panel-default p-3"&amp;gt;&lt;BR /&gt;&amp;lt;h4 class="widget-heading text-primary"&amp;gt;Was the solution helpful?&amp;lt;/h4&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;div class="d-flex flex-column align-items-start"&amp;gt;&lt;BR /&gt;&amp;lt;button class="btn btn-success mb-2 widget-button" ng-click="acceptSolution()"&amp;gt;&lt;BR /&gt;Accept Solution&lt;BR /&gt;&amp;lt;/button&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;button class="btn btn-danger widget-button" ng-click="showRejectModal()"&amp;gt;&lt;BR /&gt;Reject Solution&lt;BR /&gt;&amp;lt;/button&amp;gt;&lt;BR /&gt;&amp;lt;/div&amp;gt;&lt;BR /&gt;&amp;lt;/div&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;div ng-if="data.actionTaken"&amp;gt;&lt;BR /&gt;&amp;lt;p&amp;gt;{{ data.message }}&amp;lt;/p&amp;gt;&lt;BR /&gt;&amp;lt;/div&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;div class="modal-backdrop" ng-if="showModal"&amp;gt;&lt;BR /&gt;&amp;lt;div class="modal-content-box p-3" style="background: white; border-radius: 6px; max-width: 500px; margin: 100px auto;"&amp;gt;&lt;BR /&gt;&amp;lt;form name="rejectForm" novalidate ng-submit="submitRejection()"&amp;gt;&lt;BR /&gt;&amp;lt;h5 class="mb-2"&amp;gt;Please tell us why you're rejecting the solution&amp;lt;/h5&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;textarea ng-model="data.rejectionReason"&lt;BR /&gt;class="form-control"&lt;BR /&gt;rows="4"&lt;BR /&gt;required&lt;BR /&gt;placeholder="Enter your reason..."&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;lt;div class="modal-buttons mt-3 d-flex justify-content-end"&amp;gt;&lt;BR /&gt;&amp;lt;button type="button" class="btn btn-secondary mr-2" ng-click="closeModal()"&amp;gt;Cancel&amp;lt;/button&amp;gt;&lt;BR /&gt;&amp;lt;button type="submit" class="btn btn-primary widget-button" ng-disabled="rejectForm.$invalid"&amp;gt;Submit&amp;lt;/button&amp;gt;&lt;BR /&gt;&amp;lt;/div&amp;gt;&lt;BR /&gt;&amp;lt;/form&amp;gt;&lt;BR /&gt;&amp;lt;/div&amp;gt;&lt;BR /&gt;&amp;lt;/div&amp;gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;CSS:&lt;/P&gt;&lt;P&gt;/* === Panel/Card === */&lt;BR /&gt;.panel {&lt;BR /&gt;border: none;&lt;BR /&gt;border-radius: 10px;&lt;BR /&gt;background-color: #ffffff;&lt;BR /&gt;padding: 20px;&lt;BR /&gt;box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Heading === */&lt;BR /&gt;.widget-heading {&lt;BR /&gt;font-weight: 600;&lt;BR /&gt;margin-bottom: 15px;&lt;BR /&gt;color: var(--brand-primary, #007bff); /* Use portal theme color or fallback to Bootstrap blue */&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Base Button === */&lt;BR /&gt;.btn {&lt;BR /&gt;width: 100%;&lt;BR /&gt;max-width: 300px;&lt;BR /&gt;font-weight: 600;&lt;BR /&gt;padding: 10px;&lt;BR /&gt;font-size: 14px;&lt;BR /&gt;border-radius: 8px;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.mb-2 {&lt;BR /&gt;margin-bottom: 10px;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Custom Widget Button Enhancements === */&lt;BR /&gt;.widget-button {&lt;BR /&gt;width: 100%;&lt;BR /&gt;max-width: 300px;&lt;BR /&gt;font-weight: 600;&lt;BR /&gt;padding: 10px 20px;&lt;BR /&gt;font-size: 15px;&lt;BR /&gt;border-radius: 8px;&lt;BR /&gt;box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);&lt;BR /&gt;transition: all 0.2s ease-in-out;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.widget-button:hover {&lt;BR /&gt;transform: translateY(-1px);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Force Button Colors (Overrides Theme) === */&lt;BR /&gt;.btn-success.widget-button {&lt;BR /&gt;background-color: #28a745 !important;&lt;BR /&gt;border-color: #28a745 !important;&lt;BR /&gt;color: #fff !important;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.btn-danger.widget-button {&lt;BR /&gt;background-color: #dc3545 !important;&lt;BR /&gt;border-color: #dc3545 !important;&lt;BR /&gt;color: #fff !important;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.btn-success.widget-button:hover {&lt;BR /&gt;background-color: #218838 !important;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.btn-danger.widget-button:hover {&lt;BR /&gt;background-color: #c82333 !important;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Modal Overlay === */&lt;BR /&gt;.modal-backdrop {&lt;BR /&gt;position: fixed;&lt;BR /&gt;top: 0;&lt;BR /&gt;left: 0;&lt;BR /&gt;width: 100%;&lt;BR /&gt;height: 100%;&lt;BR /&gt;background-color: rgba(0, 0, 0, 0.6);&lt;BR /&gt;z-index: 1000;&lt;BR /&gt;display: flex;&lt;BR /&gt;align-items: center;&lt;BR /&gt;justify-content: center;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Modal Content Box === */&lt;BR /&gt;.modal-content-box {&lt;BR /&gt;background-color: #fff;&lt;BR /&gt;padding: 25px;&lt;BR /&gt;border-radius: 10px;&lt;BR /&gt;width: 500px;&lt;BR /&gt;max-width: 90%;&lt;BR /&gt;box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Modal Buttons Layout === */&lt;BR /&gt;.modal-buttons {&lt;BR /&gt;display: flex;&lt;BR /&gt;justify-content: flex-end;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* === Textarea === */&lt;BR /&gt;textarea.form-control {&lt;BR /&gt;width: 100%;&lt;BR /&gt;resize: vertical;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.btn-primary.widget-button {&lt;BR /&gt;background-color: var(--brand-primary, #007bff) !important;&lt;BR /&gt;border-color: var(--brand-primary, #007bff) !important;&lt;BR /&gt;color: #fff !important;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;.btn-primary.widget-button:hover {&lt;BR /&gt;background-color: #0069d9 !important;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Client script:&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;($scope) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.showModal = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.rejectionReason = &lt;/SPAN&gt;&lt;SPAN&gt;''&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.acceptSolution = &lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;SPAN&gt; ga = &lt;/SPAN&gt;&lt;SPAN&gt;new&lt;/SPAN&gt; &lt;SPAN&gt;GlideAjax&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;'SolutionFeedbackHandler'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_name'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'processFeedback'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_incident_id'&lt;/SPAN&gt;&lt;SPAN&gt;, $scope.data.sys_id);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_action'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'accept'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_comment'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;''&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.getXMLAnswer(&lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;(response) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (response === &lt;/SPAN&gt;&lt;SPAN&gt;'success'&lt;/SPAN&gt;&lt;SPAN&gt;) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.$apply(&lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.data.message = &lt;/SPAN&gt;&lt;SPAN&gt;"Thank you! The incident is now closed."&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.data.actionTaken = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;});&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;} &lt;/SPAN&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;alert(&lt;/SPAN&gt;&lt;SPAN&gt;"Failed: "&lt;/SPAN&gt;&lt;SPAN&gt; + response);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;});&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.showRejectModal = &lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.rejectionReason = &lt;/SPAN&gt;&lt;SPAN&gt;''&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.showModal = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.closeModal = &lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.rejectionReason = &lt;/SPAN&gt;&lt;SPAN&gt;''&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.showModal = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.data.rejectionReason = &lt;/SPAN&gt;&lt;SPAN&gt;''&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.submitRejection = &lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;SPAN&gt; comment = ($scope.data.rejectionReason || &lt;/SPAN&gt;&lt;SPAN&gt;""&lt;/SPAN&gt;&lt;SPAN&gt;).trim();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;console.log(&lt;/SPAN&gt;&lt;SPAN&gt;"DEBUG: comment ="&lt;/SPAN&gt;&lt;SPAN&gt;, comment);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (comment === &lt;/SPAN&gt;&lt;SPAN&gt;""&lt;/SPAN&gt;&lt;SPAN&gt;) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;alert(&lt;/SPAN&gt;&lt;SPAN&gt;"Please enter a reason for rejection."&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;SPAN&gt; ga = &lt;/SPAN&gt;&lt;SPAN&gt;new&lt;/SPAN&gt; &lt;SPAN&gt;GlideAjax&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;'SolutionFeedbackHandler'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_name'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'processFeedback'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_incident_id'&lt;/SPAN&gt;&lt;SPAN&gt;, $scope.data.sys_id);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_action'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'reject'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.addParam(&lt;/SPAN&gt;&lt;SPAN&gt;'sysparm_comment'&lt;/SPAN&gt;&lt;SPAN&gt;, comment);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;ga.getXMLAnswer(&lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;(response) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (response === &lt;/SPAN&gt;&lt;SPAN&gt;'success'&lt;/SPAN&gt;&lt;SPAN&gt;) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.$apply(&lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.data.message = &lt;/SPAN&gt;&lt;SPAN&gt;"Thanks! The incident has been reopened."&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.data.actionTaken = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$scope.showModal = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;});&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;} &lt;/SPAN&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;alert(&lt;/SPAN&gt;&lt;SPAN&gt;"Failed: "&lt;/SPAN&gt;&lt;SPAN&gt; + response);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;});&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;BR /&gt;&lt;BR /&gt;Server script:&lt;BR /&gt;&lt;/SPAN&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;data.sys_id = $sp.getParameter(&lt;/SPAN&gt;&lt;SPAN&gt;"sys_id"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;data.showWidget = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;SPAN&gt; gr = &lt;/SPAN&gt;&lt;SPAN&gt;new&lt;/SPAN&gt; &lt;SPAN&gt;GlideRecord&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;'incident'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (gr.&lt;/SPAN&gt;&lt;SPAN&gt;get&lt;/SPAN&gt;&lt;SPAN&gt;(data.sys_id) &amp;amp;&amp;amp; gr.state == &lt;/SPAN&gt;&lt;SPAN&gt;6&lt;/SPAN&gt;&lt;SPAN&gt;) { &lt;/SPAN&gt;&lt;SPAN&gt;// 6 = Resolved&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;data.showWidget = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;})();&lt;BR /&gt;&lt;BR /&gt;Screenshots of the output of the widget are below&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;Feel free to use the widget as needed or suggest the best modification which makes functionality more dynamic for other tables.&lt;BR /&gt;&lt;BR /&gt;Please click helpful if you use it&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PuneetHegde1_0-1752761204764.png" style="width: 400px;"&gt;&lt;img src="https://www.servicenow.com/community/image/serverpage/image-id/456579iD7F0F14C4BA3AF6C/image-size/medium?v=v2&amp;amp;px=400" role="button" title="PuneetHegde1_0-1752761204764.png" alt="PuneetHegde1_0-1752761204764.png" /&gt;&lt;/span&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PuneetHegde1_1-1752761233625.png" style="width: 400px;"&gt;&lt;img src="https://www.servicenow.com/community/image/serverpage/image-id/456580iA4B9E12A976D0BFF/image-size/medium?v=v2&amp;amp;px=400" role="button" title="PuneetHegde1_1-1752761233625.png" alt="PuneetHegde1_1-1752761233625.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Thank you,&lt;BR /&gt;Puneet Hegde&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 17 Jul 2025 14:09:14 GMT</pubDate>
      <guid>https://www.servicenow.com/community/itsm-forum/reject-button-in-custom-service-portal-widget-not-recognizing/m-p/3324679#M544022</guid>
      <dc:creator>Puneet Hegde1</dc:creator>
      <dc:date>2025-07-17T14:09:14Z</dc:date>
    </item>
    <item>
      <title>Re: Reject button in custom Service Portal widget not recognizing textarea input</title>
      <link>https://www.servicenow.com/community/itsm-forum/reject-button-in-custom-service-portal-widget-not-recognizing/m-p/3324687#M544023</link>
      <description>&lt;P&gt;Dear Bhimashankar,&lt;BR /&gt;I was able to identify the issue. The main problem was with the scope, where I forgot to define the scope in the client script. Once I defined the scope, it worked as expected, and I also polished some CSS to make the widget look good.&lt;BR /&gt;&lt;BR /&gt;Thank you,&lt;BR /&gt;Puneet&lt;/P&gt;</description>
      <pubDate>Thu, 17 Jul 2025 14:11:54 GMT</pubDate>
      <guid>https://www.servicenow.com/community/itsm-forum/reject-button-in-custom-service-portal-widget-not-recognizing/m-p/3324687#M544023</guid>
      <dc:creator>Puneet Hegde1</dc:creator>
      <dc:date>2025-07-17T14:11:54Z</dc:date>
    </item>
  </channel>
</rss>

