Service Portal:OOB Approval widget

gomathyshankar
Tera Contributor

Hi,

How to add the comments field in the OOB Approval widget and make it mandatory when the approvers rejects it.

1 ACCEPTED SOLUTION

Hi Selva,



Use the below and it wil work ( we have to change both client and server to update user comments in approval table)



Highlighted are the changes



Client controller:


function ($scope, spUtil, snRecordWatcher,spModal) {



  if ($scope.options.portal == true || $scope.options.portal == 'true') {


      $scope.contentColClass = "col-xs-12";


  $scope.options.portal = true;


  } else {


  $scope.options.portal = false;


  $scope.contentColClass = "col-sm-9";


  }




  $scope.data.op = "";


  snRecordWatcher.initList("sysapproval_approver", "state=requested^approver=" + window.NOW.user_id);




  function get() {


      spUtil.update($scope);


  }




  $scope.$on('record.updated', function(name, data) {


  get();


  })




  $scope.approve = function(id) {


      $scope.data.op = "approved";


      $scope.data.target = id;


      get();


  }




  $scope.reject = function(id) {


    c.onPrompt(id);


  }


c.onPrompt = function(id) {  


                spModal.open({  


                      title: 'Give me a comment',  


                      message: 'Your comment please?',  


                      input: true,  


                      value: c.comment  


              }).then(function(comment) {  


                      c.comment = comment;  


  if(comment)


  {


                      $scope.data.comment = comment;  


  $scope.data.op = "rejected";


  $scope.data.target = id;


  get();


  }


              })  


      }


}



Server side:


Replace


if (input && input.op) {


  var app = new GlideRecord("sysapproval_approver");


  if (app.get(input.target)) {


      app.state = input.op;


      app.update();


  }



With



if (input && input.op) {



  if(input.op == 'approved')


  {


  var app = new GlideRecord("sysapproval_approver");


  if (app.get(input.target)) {


      app.state = input.op;


      app.update();


  }


  }


  else if(input.op == 'rejected' && input.comment)


  {


  var app = new GlideRecord("sysapproval_approver");


  if (app.get(input.target)) {


    app.comments = input.comment;


      app.state = input.op;


      app.update();


  }


  }




Thanks and regards


Swamy


View solution in original post

38 REPLIES 38

what is the version of your servicenow instance?


spModal is provided in Helsinki patch 5. So, it will work only if servicenow version is Helsinki patch 5 or after patch5.


Hi Selva,



Is widget working as expected with the above code given in your instance?



Thanks and regards


Swamy


Thanks Swamy.The solution you provided worked for me.


Hi Gomathyshankar,



I followed the same procedure updating server side and client side script but ended up getting no approvals records in my widget like how you were getting before.Can you please tell me   what was the fix you applied ? Screen Shot 2017-05-30 at 11.53.27 am.png