How to add a table name in a client controller of a widget?

Sagnika Saha1
Kilo Contributor

Hello All,

I have a scenario. In Portal, under Approval section we have knowledge approvals and demand approvals. So knowledge approvals are rejected, no comment should pop up but if demand is rejected , we need to show a mandatory message to provide a reason for rejection.

For knowledge, it is working but for demand no pop up message is coming.

How we can distinguish two approvals in the same widget?

Please help!

Thanks!

4 REPLIES 4

Mohith Devatte
Tera Sage
Tera Sage

hello @Sagnika Saha ,

so i am assuming that your URL of the ticket page must have a parameter called sys_id which is nothing but the approval record sys_id so what you can do it just write this piece of code in server side 

data.table=""
var gr = new GlideRecord('syapproval_approver');
gr.addQuery('sys_id',$sp.getParameter('sys_id'));
gr.query();
if(gr.next())
{
data.table=gr.source_table;
}

Now using data.table you can distinguish between demand and knowledge

Hope this helps 

please mark my answer correct if this helps you

Hi Mohith,

In server side, we have this below code:

var approvalRecord = new GlideRecord('sysapproval_approver');
        approvalRecord.addEncodedQuery('stateINapproved,rejected^u_approval_description=' + appDescription + '^sysapproval=' + approvingRecord.sys_id.getValue());
        approvalRecord.query();
        if (approvalRecord.next()) {
            data.showMessage = true;
            var approver = approvalRecord.approver.getValue(),
                approverName = approvalRecord.approver.getDisplayValue(),
                curState = approvalRecord.state.getDisplayValue();
            curState = curState ? curState.toLowerCase() : curState;
            if (approver == gs.getUserID()) {
                data.approvalMessage = gs.getMessage('hsbc.request_approval.already_approved', [curState, gs.getMessage('you')]);
            } else {
                data.approvalMessage = gs.getMessage('hsbc.request_approval.already_approved', [curState, approverName]);
            }
        }
    }

    //test field
    /*
            MGTP-3214 showing value of number field rather than a display value of record
            as KB articles use short description as the display value rather than number
            */
    data.number = approvingRecord.getDisplayValue('number');
    data.recordId = approvingRecord.sys_id.getValue();
    //data.number = grRecord.getDisplayValue();
    data.table = grRecord.getTableName();
    data.label = approvingRecord.getLabel();

 

and I checked the name of the reject button is c.reject

c.reject = function(show_rej_reason) {
        $scope.data.reject_reason = c.reject_reason;
        //$scope.data.kbRejectComments=c.kbRejectComments;
        $scope.data.sopRejectComments=c.sopRejectComments;
        $scope.data.dmdRejectComments=c.dmdRejectComments;

        if (show_rej_reason == 'true' && $scope.data.reject_reason.value ==''){
            alert('You must select a rejection reason');
            return false;
        }

//         if (show_rej_reason == 'true' && $scope.data.show_kb_comments && $scope.data.kbRejectComments==''){
//             alert('You must enter comments with this rejection reason');
//             return false;
//         }

        //sop comments
        if (show_rej_reason == 'true' && $scope.data.show_sop_comments && $scope.data.sopRejectComments==''){
            alert('You must enter comments with this rejection reason');
            return false;
        }
        
        if (show_rej_reason == 'true' && $scope.data.show_dmd_comments && $scope.data.dmdRejectComments==''){
            alert('Provide a reason for rejecting this approval');
            return false;
        }

        $scope.data.op = "rejected";
        $scope.data.target = $scope.data.sys_id;
        var modal = document.getElementById('myRejModal');
        modal.style.display = "none";
//         var modal2= document.getElementById('myRejModalKB');
//         modal2.style.display = "none";
        get();
    }

How I am going to dispay mandatory error message for demand and not for knowledge?

you can use this 

if(approvalRecord.source_table=="demand_table_name")

{

//write your rejection message

}

Hope this helps

Hi Mohith,

 

I have managed to bring the pop up message on rejection but now the issue is before i put the comments and click on 'OK', the record gets rejected in the background and in the record the comment is not updated.

Please find the below code i have written:

Client code:

c.reject = function($event, approval,id, show_rej_reason) {
        
        $scope.data.reject_reason = c.reject_reason;
        //$scope.data.kbRejectComments=c.kbRejectComments;
        $scope.data.sopRejectComments=c.sopRejectComments;
        $scope.data.dmdRejectComments=c.dmdRejectComments;
        
        if ($scope.data.sys_class_name == 'dmn_demand'){
            spModal.open({
            title: 'Reject Approval',
            message: 'Provide a reason for rejecting this approval',
            input: true,
            value: $scope.name
        }).then(function(name) {
                $scope.name = name;

                $scope.data.updateMultiple = 'false';
                $scope.data.op = "rejected";
                $scope.data.target = id;
                $scope.data.reject_comment = "Rejection reason: " + $scope.name;
                get();
            });
        }

 

Server code:

if (data.state == 'approved' || data.state == 'rejected' || data.state == 'not_required') {
        var arr = [];
             var app = new GlideRecord("sysapproval_approver")
             if (app.get(data.target)){
                  app.state = data.state;
                 if (data.state == 'rejected') {
                        app.comments = input.reject_comment;
                    } else if (data.state == 'approved') {
                        app.comments = input.approve_comment;
                    }
                    app.update();
             }