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.

Updating multiple records using record producer

Sondre Fr_lich1
Giga Contributor

Hi SN-community!

One of our customers have a request to update the HR Profile when a HR-profile change request is submitted through the HR Portal.

As of now the record producer create a HR Case record using the   script includes that are provided out of the box (the record producer is mapped to the HR case). A case is created with some tasks to update other systems when a change is created from the portal.

However, the customer also wish the changes made to also apply to the HR Profile of the relevant user.

I tried to do this using the record producer script, but I am not sure if that is the correct place to do GlideRecord queries? Is there a more optimal solution?

This is what I tried so far:

var hrServiceU = new sn_hr_core.hr_ServicesUtil(current, gs);

hrServiceU.createCaseFromProducer(producer,cat_item.sys_id); //calls the case script include

updateRecord();

function updateRecord() {

var opened_for = producer.opened_for;

gs.info("Opened for :" + opened_for);

var core_profile = new GlideRecord('sn_hr_core_profile');

core_profile.addQuery('user', opened_for);

core_profile.query();

if(core_profile.next()) {

core_profile.u_bank_name = producer.u_bank_name;

core_profile.u_branch = producer.u_branch;

core_profile.u_account_number = producer.u_account_number;

core_profile.u_iban_number = producer.u_iban_number;

core_profile.u_swift = producer.u_swift;

core_profile.u_a_c_name = producer;

core_profile.update();

}

}

This solution appears to not do anything at all - and I'm not too sure where to go next.

Cheers

Sondre Braathen

1 ACCEPTED SOLUTION

Sondre Fr_lich1
Giga Contributor

I found the solution - I used the wrong query parameter (name instead of user) and had to use object.setValue to set the value



var opened_for = producer.opened_for.toString();


var core = new GlideRecord('sn_hr_core_profile');


core.addQuery('user', opened_for);


core.query();



if(core.next()) {


core.setValue('u_branch', producer.u_branch.toString());


core.setValue('u_bank_name', producer.u_bank_name.toString());


core.setValue('u_account_number', producer.u_account_number.toString());


core.setValue('u_iban_number', producer.u_iban_number.toString());


core.setValue('u_swift', producer.u_swift.toString());


core.setValue('u_a_c_name', producer.u_a_c_name.toString());


core.update();


}


View solution in original post

3 REPLIES 3

kkadarsha
Giga Contributor

Hi,



Since all the fields are of record producer are mapped with HR Case try with the business rule on hr_case table to do your query or update.



Regards,


Adarsha


Hi Adarsha, thank you for your response.



The fields are not mapped, only the opened_for reference field is used in the HR Case - the rest of the variables on the record producer is printed in the description of the HR Case by an OOB script include (HR_CaseUtils). This would mean that this is hard to do with a business rule, as the variables are not saved to the sn_hr_core_case-object. Or am I wrong?  


Sondre Fr_lich1
Giga Contributor

I found the solution - I used the wrong query parameter (name instead of user) and had to use object.setValue to set the value



var opened_for = producer.opened_for.toString();


var core = new GlideRecord('sn_hr_core_profile');


core.addQuery('user', opened_for);


core.query();



if(core.next()) {


core.setValue('u_branch', producer.u_branch.toString());


core.setValue('u_bank_name', producer.u_bank_name.toString());


core.setValue('u_account_number', producer.u_account_number.toString());


core.setValue('u_iban_number', producer.u_iban_number.toString());


core.setValue('u_swift', producer.u_swift.toString());


core.setValue('u_a_c_name', producer.u_a_c_name.toString());


core.update();


}