Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Fix script to populate fields based on field values

Pablo H
Tera Contributor

Hello folks,

 

I need to create a fix script based on the values from sys_audit table. The logic is that it will go trough the records for the "Offer" table and check the values of the fields 'result_company' and 'result_contractor', check from the options 'accepted' and 'rejected'.

 

If for both fields are accepted, it will set the value of the field 'offer_accepted' to the date when the change was done.

 

If one of the fields 'result_company' and 'result_contractor' is rejected, it will set the value of the field 'offer_rejected" to the date when the change was done.

 

This will be done on every record for the offer table.

 

Thank you for any help. Thanks!

1 ACCEPTED SOLUTION

Prithvi_b
Tera Guru

Hi Pablo,

Please try this. Verify before running the script.

var gr = new GlideRecord('sys_audit');
gr.addQuery('tablename', 'incident'); / /give the table
gr.addEncodedQuery('fieldname=u_result_company^ORfieldname=u_result_contractor^newvalue=accepted^ORnewvalue=rejected');  //field name is u_result_company or u_result_contractor and newvalue is accepted or rejected
gr.orderBy('sys_created_on');
gr.query();
while (gr.next()) {
var date = gr.sys_created_on.getDisplayValue(); //date/time of record created in sys_audit table
var id = gr.documentkey;
//gs.log("test "+date +" "+id);
var kr = new GlideRecord('incident');
kr.addQuery('sys_id', id);
kr.query();
if (kr.next()) {
gs.log(kr.u_result_contractor);
if ((kr.u_result_contractor == 'accepted') && (kr.u_result_company == 'accepted')) {
var num = kr.number;
gs.log("test " + date + " " + num); // logs are for testing
kr.setValue('u_offer_accepted', date); //date/time of record created in sys_audit table
kr.update();
}

else {
if ((kr.u_result_contractor == 'rejected') || (kr.u_result_company == 'rejected')) {
gs.log("test " + date + " " + num);
kr.setValue('u_offer_rejected', date); //date/time of record created in sys_audit table
kr.update();
}
}
}
}

 

Thankyou

View solution in original post

3 REPLIES 3

Prithvi_b
Tera Guru

Hi Pablo,

Please try this. Verify before running the script.

var gr = new GlideRecord('sys_audit');
gr.addQuery('tablename', 'incident'); / /give the table
gr.addEncodedQuery('fieldname=u_result_company^ORfieldname=u_result_contractor^newvalue=accepted^ORnewvalue=rejected');  //field name is u_result_company or u_result_contractor and newvalue is accepted or rejected
gr.orderBy('sys_created_on');
gr.query();
while (gr.next()) {
var date = gr.sys_created_on.getDisplayValue(); //date/time of record created in sys_audit table
var id = gr.documentkey;
//gs.log("test "+date +" "+id);
var kr = new GlideRecord('incident');
kr.addQuery('sys_id', id);
kr.query();
if (kr.next()) {
gs.log(kr.u_result_contractor);
if ((kr.u_result_contractor == 'accepted') && (kr.u_result_company == 'accepted')) {
var num = kr.number;
gs.log("test " + date + " " + num); // logs are for testing
kr.setValue('u_offer_accepted', date); //date/time of record created in sys_audit table
kr.update();
}

else {
if ((kr.u_result_contractor == 'rejected') || (kr.u_result_company == 'rejected')) {
gs.log("test " + date + " " + num);
kr.setValue('u_offer_rejected', date); //date/time of record created in sys_audit table
kr.update();
}
}
}
}

 

Thankyou

perfect solution 

Pablo H
Tera Contributor

Thanks a lot @Prithvi_b !