- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-19-2024 07:29 AM
The issue is tied to the last couple lines of the script, the setValue and update.
If I create an entirely new GlideRecord for the table then it works fine, but I thought initialize() should clear out the GlideRecord for re-use?
Any help would be appreciated.
// ********** find and add new stakeholders to register **********
// declare gliderecord and execute query against stakeholder group
var grStakeGrpMem = new GlideRecord('sys_user_grmember');
grStakeGrpMem.addEncodedQuery('group=25dcde621b58a850f30dfc03cc4bcb53'); // EDI Applications Managers group (test sample)
grStakeGrpMem.query();
// variable declarations
var addStakeArr = []; // add stakeholders
// loop through found records
while(grStakeGrpMem.next())
{
if(grStakeGrpMem.getDisplayValue('user') != '') // // push record(s) to array if display value is not null
{
addStakeArr.push(grStakeGrpMem.getValue('user'));
}
}
// retrive array values and populate registry with new records
for(var i = 0; i < addStakeArr.length; i++)
{
var grStakeHolReg = new GlideRecord('dmn_stakeholder_register'); // declare gliderecord object and insert new records
grStakeHolReg.initialize();
grStakeHolReg.setValue('user', addStakeArr[i]);
grStakeHolReg.insert();
}
// find and deactivate stakeholders with inactive user records
grStakeHolReg.initialize();
grStakeHolReg.addEncodedQuery('sys_class_name=dmn_stakeholder_register^user.active=false');
grStakeHolReg.query();
while(grStakeHolReg.next())
{
grStakeHolReg.setValue('active', false); // ISSUE IS HERE
grStakeHolReg.update(); // ISSUE IS HERE
}
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-19-2024 10:12 AM
Hi @MBarrott ,
You are initializing variable grStakeHolReg that is being declared inside the loop. Declare it outside and see what changes.
var grStakeHolReg = new GlideRecord('dmn_stakeholder_register'); // declare gliderecord object and insert new records
// retrive array values and populate registry with new records
for(var i = 0; i < addStakeArr.length; i++)
{
grStakeHolReg.initialize();
grStakeHolReg.setValue('user', addStakeArr[i]);
grStakeHolReg.insert();
}
Regards, Ivan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2024 05:49 AM
Hi @Ivan Betev,
The update multiple is a good suggestion, I'll definitely try that. With regards to the second attempt, I basically meant running the script a second time. If I setup my data accordingly it would work fine when ran (inserts new records, adjusts active fields), but if I ran it again and therefore no changes were necessary it would cause a failure due to a duplicate primary key.
Looks to be an issue with the updates to the GlideRecord. If I used a separate GlideRecord for the insert and then another for the update it worked fine every time.
I did read that you couldn't re-use a GlideRecord after an insert as it would close the GlideRecord but I'm honestly not 100% sure if that's true. Just seems weird that I can execute the script fine initially, run it again and see a failure.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2024 08:25 AM
Hi @Ivan Betev,
I will definitely incorporate updateMultiple that is a good idea.
With regards to the second attempt, this is purely whenever I test run the script a second time. If I prep the table and records accordingly at first it will work (carries out inserts, active field changes etc) but running the script a second time when there's no data to update causes the unique key error.
Running it with separate GlideRecords for insert and updates works which is confusing.