Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

Approval Info Widget comment issue same comment showing up 3 times

NikolaTesla
Tera Expert

I have an issue where everything is working but it captures the reject reason 3 times and post them back in RITM 3 times creating 3 notifications. I only want it to post once so there won't be 3 notifcations and 3 same comments. Thanks in advance.

 

My Current code:

 

Code for Approval info widget is below(Paris release):

Server Side :

(function() {
    data.actionPreventedMsg = gs.getMessage("Update failed");
    var gr = $sp.getRecord();
    if (gr == null || !gr.isValid()) {
        data.isValid = false;
        return;
    }

    data.isValid = true;
    data.isMine = isApprovalMine(gr);
    var userApprovalAccess = gs.hasRole("approval_admin") || (gs.hasRole("approver_user") && data.isMine);
   
    var approverDisplay = gr.approver.getDisplayValue();
    if (!data.isMine && approverDisplay)
        data.approverDisplay = approverDisplay;

    if (approverDisplay) {
        data.approvedMsg = gs.getMessage("Approved by {0}", approverDisplay);
        data.rejectedMsg = gs.getMessage("Rejected by {0}", approverDisplay);
    } else {
        data.approvedMsg = gs.getMessage("Approved");
        data.rejectedMsg = gs.getMessage("Rejected");
    }

    if (input && input.op && userApprovalAccess) {
        gr.state = input.op;

        // Store rejection reason if applicable
        if (input.op === 'rejected' && input.rejectionReason) {
            // Check if rejection reason already exists in comments to prevent duplicate entries
            if (!gr.comments.includes(input.rejectionReason)) {
                gr.comments = "Rejection Reason: " + input.rejectionReason;
            }
        }

        data.updateID = gr.update();
        if (GlideStringUtil.nil(data.updateID)) {
            gr = $sp.getRecord();
        }
        data.op = "";
    }

    var fields = $sp.getFields(gr, 'state,sys_created_on');

    if (gr.sys_mod_count > 0)
        fields.push($sp.getField(gr, 'sys_updated_on'));

    data.fields = fields;
    data.state = gr.state.toString();
    data.sys_updated_on = gr.sys_updated_on.toString();
    data.sys_id = gr.getUniqueValue();
    data.table = gr.getTableName();
    var record = getRecordBeingApproved(gr);
    data.label = record.getLabel();
    data.approvedStatusMsg = gs.getMessage("{0} has been approved", record.number);

    // Append rejection reason to the related RITM/task if applicable
    if (gr.state == 'rejected' && input.rejectionReason) {
        var taskGR = new GlideRecord('sc_req_item'); // Change to 'task' if needed
        if (taskGR.get(record.sys_id)) {
            // Check if rejection reason already exists in task comments to prevent duplicate entries
            if (!taskGR.comments.includes(input.rejectionReason)) {
                taskGR.comments = "Rejected: " + input.rejectionReason;
                taskGR.update();
            }
        }
    }

    data.esignature = {
        username:  gs.getUserName(),
        userSysId: gs.getUserID(),
        e_sig_required: checkESig(gr)
    };

    function checkESig(approvalGR) {
        var esigRegistryGR = new GlideRecord("e_signature_registry");
        if (!esigRegistryGR.isValid())
            return false;
       
        var table = approvalGR.getValue("source_table");
        if (!table)
            table = approvalGR.sysapproval.sys_class_name;
        if (!table)
            return false;
       
        esigRegistryGR.addQuery("enabled", "true");
        esigRegistryGR.addQuery("table_name", table);
        esigRegistryGR.query();
        return esigRegistryGR.hasNext();
    }
   
    function getRecordBeingApproved(gr) {
        if (!gr.sysapproval.nil())
            return gr.sysapproval.getRefRecord();
        return gr.document_id.getRefRecord();
    }
})();

 

 

Client Controller :

function ($scope, spUIActionsExecuter, spUtil) {
    var c = this;
   
    var ESIGNATURE = {
        "approved": "cbfe291147220100ba13a5554ee4904d",
        "rejected": "580f711147220100ba13a5554ee4904b"
    };

    spUtil.recordWatch($scope, "sysapproval_approver", "state=requested^sys_id=" + c.data.sys_id);
    c.approvalInProgress = false;
   
    c.action = function(state) {
        if (state === 'rejected') {
            var rejectionReason = prompt("Please provide a rejection reason:");
            if (!rejectionReason || rejectionReason.trim() === '') {
                spUtil.addErrorMessage("Rejection reason is required.");
                return;
            }
            c.data.rejectionReason = rejectionReason;
        }

        if (c.data.esignature.e_sig_required) {
            var requestParams = {
                username: c.data.esignature.username,
                userSysId: c.data.esignature.userSysId
            };
            spUIActionsExecuter.executeFormAction(ESIGNATURE[state], "sysapproval_approver", c.data.sys_id, [] , "", requestParams).then(function(response) {});
        } else {
            c.approvalInProgress = true;
            c.data.op = state;
            c.server.update().then(function() {
                c.approvalInProgress = false;
                if (!c.data.updateID)
                    spUtil.addErrorMessage(c.data.actionPreventedMsg);
                else {
                    c.data.state = state;
                    if (state === 'approved') {
                        spUtil.addInfoMessage(c.data.approvedStatusMsg);
                    } else if (state === 'rejected') {
                        spUtil.addInfoMessage("Approval rejected with reason: " + c.data.rejectionReason);
                    }
                }
            });
        }
    };
}
0 REPLIES 0