other than prompt what can be used to display a pop up in widget which should be non mandatory

Tabassum1
Tera Contributor

I have Approve button for Demand, so when we click on the button it should display a pop up. Approvers should have the option to add comments when approving, but this should remain optional (not mandatory). Th Approve button is implemented in a widget.

11 REPLIES 11

@Tabassum1 

please share complete widget code

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Client controller code :

 

function ($scope, spUIActionsExecuter, spUtil, spModal) {
    var c = this;
   
    var ESIGNATURE = {
        "approved""cbfe291147220100ba13a5554ee4904d",
        "rejected""580f711147220100ba13a5554ee4904b"
    };
   
    spUtil.recordWatch($scope, "sysapproval_approver""state=requested^sys_id="+ c.data.sys_id);

    c.action = function(state) {
        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 if(state == 'rejected') {
           
            if (c.data.no_comment_rejection == 'true')
    {
        c.data.op = state;
                c.server.update().then(function() {
                    if (!c.data.updateID) // update failed
                        spUtil.addErrorMessage(c.data.actionPreventedMsg);
                    else
                        c.data.state = state;
                        });
    }  
            else
                {
                if (c.data.reject_raison_label)
                    {
                        var shared ={};
             spModal.open({
        title: 'Rejection',
                widget:'reject_raison',
                keyboard: false,
                widgetInput : {label:c.data.reject_raison_label,options: c.data.reject_raison_options},
                shared:shared
    }).then(function() {
             if (shared.select=='' || shared.select==null)
                     {
                 spModal.alert(task.reject_raison_label +' mandatory')
                     }
                 else
                     {
            c.data.comments = shared.select+'';
            c.data.op = state;
            c.data.reject_raison = 'true';                  
        c.server.update().then(function() {
                    if (!c.data.updateID) // update failed
                        spUtil.addErrorMessage(c.data.actionPreventedMsg);
                    else
                        c.data.state = state;
                        });
                     }
             }
                 );
             
                    }
            else
                {          
                    spModal.prompt("Please enter reason for rejection").then(function(rejectReason)
             {
                        c.data.comments = rejectReason;
                        c.data.op = state;
                c.server.update().then(function() {
                    if (!c.data.updateID) // update failed
                        spUtil.addErrorMessage(c.data.actionPreventedMsg);
                    else
                        c.data.state = state;
                        });

                });        
                    }
        }
        }  
           
        else if(state == 'approved') {
                c.data.op = state;
                c.server.update().then(function() {
                    if (!c.data.updateID) // update failed
                        spUtil.addErrorMessage(c.data.actionPreventedMsg);
                    else
                        c.data.state = state;
                        });
                }      
                   
                       
                   
   
   
}
}
 
 
servcer script : 
 
(function() {
    data.actionPreventedMsg = gs.getMessage("Update failed");
    data.itemflag=0;

    var gr = $sp.getRecord();
    if (gr == null || !gr.isValid()) {
        data.isValid = false
        return;
    }
    var item_name=gr.sysapproval.cat_item;

    if ((typeof gr.sysapproval.variables.reject_raison)=='object')
        {
            var varia = new GlideRecord('sc_item_option_mtom');
            varia.addQuery('request_item',gr.sysapproval.sys_id+'');
            varia.addQuery('sc_item_option.item_option_new.name','reject_raison');
            varia.setLimit(1);
            varia.query();
            varia.next();
            data.reject_raison_label = varia.sc_item_option.item_option_new.question_text.getDisplayValue();
            data.reject_raison_options = [];
            var grQC = new GlideRecord('question_choice');
            grQC.addEncodedQuery("question="+varia.sc_item_option.item_option_new.sys_id);
            grQC.orderBy('order');
            grQC.query();
        while (grQC.next()) {
        var choice = {};
        choice.order = grQC.getValue('order');
        choice.text = grQC.text.getDisplayValue();
        choice.value = grQC.getValue('value');
        data.reject_raison_options.push(choice);
}
       
        }
   
   
   
   
    data.isValid = true;
    data.isMine = isApprovalMine(gr);
//Orlando   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 ){ //Orlando && userApprovalAccess) {
       
            if(input.reject_raison =='true'){      
        var grreject = new GlideRecord('sc_item_option_mtom');
            grreject.addQuery('request_item',gr.sysapproval+'');
            grreject.addQuery('sc_item_option.item_option_new.name','reject_raison');
            grreject.setLimit(1);
            grreject.query();
            grreject.next();
       
        var grvalue = new GlideRecord('sc_item_option');
        grvalue.get(grreject.sc_item_option);
        grvalue.setValue('value',input.comments);
        grvalue.update();                  
    }
       
        gr.state = input.op;
        if (input.comments){
        gr.comments = input.comments;
        }
        data.updateID = gr.update();
        if (GlideStringUtil.nil(data.updateID)) {
            // update failed so fetch again for correct values
            gr = $sp.getRecord();
        }
        data.op = "";
    }

    var fields = $sp.getFields(gr, 'sysapproval,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.no_comment_rejection = gr.sysapproval.cat_item.u_no_comment_rejection+'';
    data.sys_updated_on = gr.sys_updated_on.toString();
    data.sys_id = gr.getUniqueValue();
    data.table = gr.getTableName();
    data.label = getRecordBeingApproved(gr).getLabel();
    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();
    }
})();

@Tabassum1 

updated client controller, all other is same

function ($scope, spUIActionsExecuter, spUtil, spModal) {
    var c = this;

    var ESIGNATURE = {
        "approved": "cbfe291147220100ba13a5554ee4904d",
        "rejected": "580f711147220100ba13a5554ee4904b"
    };

    spUtil.recordWatch($scope, "sysapproval_approver", "state=requested^sys_id=" + c.data.sys_id);

    c.action = function(state) {
        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 if (state == 'rejected') {
            if (c.data.no_comment_rejection == 'true') {
                c.data.op = state;
                c.server.update().then(function() {
                    if (!c.data.updateID) // update failed
                        spUtil.addErrorMessage(c.data.actionPreventedMsg);
                    else
                        c.data.state = state;
                });
            } else {
                if (c.data.reject_raison_label) {
                    var shared = {};
                    spModal.open({
                        title: 'Rejection',
                        widget: 'reject_raison',
                        keyboard: false,
                        widgetInput: { label: c.data.reject_raison_label, options: c.data.reject_raison_options },
                        shared: shared
                    }).then(function() {
                        if (shared.select == '' || shared.select == null) {
                            spModal.alert(c.data.reject_raison_label + ' mandatory');
                        } else {
                            c.data.comments = shared.select + '';
                            c.data.op = state;
                            c.data.reject_raison = 'true';
                            c.server.update().then(function() {
                                if (!c.data.updateID) // update failed
                                    spUtil.addErrorMessage(c.data.actionPreventedMsg);
                                else
                                    c.data.state = state;
                            });
                        }
                    });
                } else {
                    spModal.prompt("Please enter reason for rejection").then(function(rejectReason) {
                        c.data.comments = rejectReason;
                        c.data.op = state;
                        c.server.update().then(function() {
                            if (!c.data.updateID) // update failed
                                spUtil.addErrorMessage(c.data.actionPreventedMsg);
                            else
                                c.data.state = state;
                        });
                    });
                }
            }
        } else if (state == 'approved') {
            spModal.prompt("Please enter reason for Approval (optional)").then(function(acceptReason) {
                // Allow empty or undefined comment
                if (acceptReason !== undefined) {
                    c.data.comments = acceptReason;
                }
                c.data.op = state;
                c.server.update().then(function() {
                    if (!c.data.updateID) // update failed
                        spUtil.addErrorMessage(c.data.actionPreventedMsg);
                    else
                        c.data.state = state;
                });
            });
        }
    };
}

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

There is no difference, when clicked on approve button and if we don't enter comment also the demand should be approved but with the above code pop up is display and ok button is greyed out we wont be able to approve the demand without entering the comments.

 

I need a pop up when clicked on approve button and when no comment is entered also the demand should be approved.

 

Tabassum1_0-1766565975776.png

 

@Tabassum1 

why not use simple text box and have 2 buttons cancel and ok?

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader