How to copy approver name, approved datetime and approval status into a field in task

omsa1
Kilo Guru

Hi All,

I need help with this , i'm trying to copy approval details into task field

i tried with script include, but something   missing here ,it is not creating a task after approval.

var AddApproverDateTime = Class.create();  

AddApproverDateTime.prototype = {  

  initialize: function() {  

  },  

  addDateTime: function(id) {  

  var sys_updated_on =' ';  

  var gr= new GlideRecord('sc_req_item');  

  gr.get(id);  

  var apv = new GlideRecord('sysapproval_approver');  

  var qc=apv.addQuery('sysapproval',gr.getValue('request'));  

  qc.addOrCondition('sysapproval', gr.getValue('sys_id'));  

  apv.addQuery('sys_updated_on','!=',''); // add this to only find approvals that have comments on them  

  apv.query();  

  while (apv.next()) { // change if to while so it will go through all approvals with comments  

  DateTime += "\nApproval DateTime: from " + apv.approver.name + "\n" + apv.sys_updated_on; // add approver name here  

  }  

  return DateTime;  

 

},  

type: 'AddApproverDateTime'  

};  

1 ACCEPTED SOLUTION

Rama Chandra D
Kilo Guru

Hi,



Follow the steps:



  1. Create a BR on sc_task table.   Set when as 'after' and check 'advanced' and 'insert' options .
  2. Check the script to ensure, all the field names are populated as per your instance.
  3. Use the script below and paste it into 'advance script'.
  4. It is advised to test the script on non-production instances before implementing this modification


Script



(function executeRule(current, previous /*null when async*/) {



  var msg1 = '';


  var msg2 = '';


  var app =[];


  var count = 0;


  getApprovalDetails();


  gs.info(current.request_item.sys_id);



  function getApprovalDetails() {


  var thisTask = new GlideRecord('sysapproval_approver');


  thisTask.addEncodedQuery('sysapproval='+current.request_item.sys_id);


  thisTask.orderBy('sys_updated_on');


  thisTask.query();


  while(thisTask.next()){


  count = count+1;


  gs.info(thisTask.approver.getDisplayValue());


  gs.info("Updated: "+thisTask.sys_updated_on.getDisplayValue());


  updateFields(thisTask,count);


  }


  gs.info(count);


  updateTask();


  }



  function updateFields(rec,count) {


  if(count>1){


  msg2 = "Approved by "+rec.approver.getDisplayValue() + " on "+ rec.sys_updated_on.getDisplayValue();


  gs.info("MSG 2: "+msg2);


  }


  else {


  msg1= "Approved by "+rec.approver.getDisplayValue() + " on "+ rec.sys_updated_on.getDisplayValue();


  gs.info("MSG 1: "+msg1);



  }


  }



  function updateTask() {


  var task = new GlideRecord('sc_task');


  task.addQuery('sys_id',current.sys_id);


  task.query();


  if(task.next()){


  task.u_manager_s_approval.setValue(msg1);


  task.u_marketing_ops_approval.setValue(msg2);


  task.update();


  }


  }


})(current, previous);



The gs.info statements are to debug. You can remove them or keep them.



Please, see the image for the output.



Darshak


View solution in original post

24 REPLIES 24

Just to make sure we are on same page, the BR runs only on insert. Any changes to the approval record after the task has been created, do not get copied into these fields.



Darshak


here you go



find_real_file.png


find_real_file.png


(function executeRule(current, previous /*null when async*/) {




    var msg1 = '';  


  var msg2 = '';  


  var app =[];  


  var count = 0;  


  getApprovalDetails();  


  gs.info(current.request_item.sys_id);  


 


  function getApprovalDetails() {  


  var thisTask = new GlideRecord('sysapproval_approver');  


  thisTask.addEncodedQuery('sysapproval='+current.request_item.sys_id);  


  thisTask.orderBy('sys_updated_on');  


  thisTask.query();  


  while(thisTask.next()){  


  count = count+1;  


  gs.info(thisTask.approver.getDisplayValue());  


  gs.info("Updated: "+thisTask.sys_updated_on.getDisplayValue());  


  updateFields(thisTask,count);  


  }  


  gs.info(count);  


  updateTask();  


  }  


 


  function updateFields(rec,count) {  


  if(count>1){  



msg2 = "Approved by "+rec.approver.getDisplayValue() + " on "+ rec.sys_updated_on.getDisplayValue()+ " with comments "+"\n"+ rec.comments.getJournalEntry(-1);


  gs.info("MSG 2: "+msg2);  


  }  


  else {  


  msg1= "Approved by "+rec.approver.getDisplayValue() + " on "+ rec.sys_updated_on.getDisplayValue()+ " with comments "+"\n"+ rec.comments.getJournalEntry(-1);


  gs.info("MSG 1: "+msg1);  


 


  }  


  }  


 


  function updateTask() {  


  var task = new GlideRecord('sc_task');  


  task.addQuery('sys_id',current.sys_id);  


  task.query();  


  if(task.next()){  


  task.u_manager_s_approval.setValue(msg1);  


  task.u_marketing_ops_approval.setValue(msg2);  


  task.update();  


  }  


  }  




})(current, previous);


I meant approval record on sys approval table that corresponds to Joan's approval. How did you test your code changes?



Darshak


find_real_file.png