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

aswinsiddaling2
Kilo Guru

This script does only query operation and does not contain any create operation. Can you tell me what the requirement is and I can help you with the script



Thanks and Regards,


Aswin Siddalingam


Rama Chandra D
Kilo Guru

Hi,



Do you want to create a new task or copy the approval fields to a task record? Can you tell me how do you plan to call this script include? It cannot be called in client scripts as I see you haven't written this as client callable. Any details on what you want to accomplish would help us understand better.



If you just want to display these fields on the TASK form, you can use form layout to dot walk to the fields on your interest on 'requested item' table.



Thanks


Darshak


Hi Darshak,



I'm trying to apply script in Script Includes in Catalog Task Workflow Event   for this. this script is to copy over comment but i want to modify it to copy other details like in my case i want to copy over approver name, approved datetime and approval state.



i have 2 stage of approval in my workflow.



find_real_file.png


when manager approve , it should got to   "manager's approval" field in task and update approver name, approved datetime and state if rejected or approved.


same goes to second stage approval after joan or Dhatre approve, the system should update approver name, datetime and state if rejected or approved in Marketing ops field.


find_real_file.png


There are few errors in the code, allow me time to look at it. I'll get back to you. Can you tell me the field names of Manager's approval and the Marketing Ops approval?



Darshak