How to make an article favourite for all users in Employee Portal

vidhya_mouli
Giga Sage

I have a specific article which I want to make favourite by default to all the users. I wrote this BG script for testing:

 

 

(function() {
    // Define the reference table and document ID
    var referenceTable = 'sn_cd_content_news';
    var referenceDocument = '735b830735d9507354d80735f1c07354';
    
    // Get a specific user to test the insertion
    var userSysId = 'd7aa800ac38951509ba42d4ce0013150'; // Replace with a sys_id from your results

  // Manually check if the favorite already exists
    var favGR = new GlideRecord('sp_favorite');
    favGR.addQuery('user', userSysId);
    favGR.addQuery('reference_table', referenceTable);
    favGR.addQuery('reference_document', referenceDocument);
    favGR.query();

gs.info(favGR.getEncodedQuery());
if (!favGR.next()) {
    gs.info('Inserting new favorite for user: ' + userSysId);
        var newFavGR = new GlideRecord('sp_favorite');
        newFavGR.initialize();
        newFavGR.user = userSysId;
        newFavGR.reference_table = referenceTable;
        newFavGR.reference_document = referenceDocument;
        newFavGR.insert();
}
})();

 

 

However, when I run the script, I get error: 

Script: Inserting new favorite for user: d7aa800ac38951509ba42d4ce0013150
Operation against file 'sp_favorite' was aborted by Business Rule 'Unique Favorite Item^6beb5aa1c31c1610e08896c90501318c'. Business Rule Stack:Unique Favorite Item

I manualy check sp_favorite to ensure that this record is nt already present in the table. How can I make this work?

1 ACCEPTED SOLUTION

Sandeep Rajput
Tera Patron
Tera Patron

@vidhya_mouli 

(function() {
    // Define the reference table and document ID
    var referenceTable = 'sn_cd_content_news';
    var referenceDocument = '735b830735d9507354d80735f1c07354';
    
    // Get a specific user to test the insertion
    var userSysId = 'd7aa800ac38951509ba42d4ce0013150'; // Replace with a sys_id from your results

  // Manually check if the favorite already exists
    var favGR = new GlideRecord('sp_favorite');
    favGR.addQuery('user', userSysId);
    favGR.addQuery('reference_table', referenceTable);
    favGR.addQuery('reference_document', referenceDocument);
    favGR.query();

gs.info(favGR.getEncodedQuery());
if (!favGR.next()) {
    gs.info('Inserting new favorite for user: ' + userSysId);
        var newFavGR = new GlideRecord('sp_favorite');
        newFavGR.initialize();
        newFavGR.user = userSysId;
        newFavGR.reference_table = referenceTable;
        newFavGR.reference_document = referenceDocument;
        newFavGR.setWorkflow(false);
        newFavGR.insert();
}
})();

Please see if this works.

View solution in original post

3 REPLIES 3

Sandeep Rajput
Tera Patron
Tera Patron

@vidhya_mouli 

(function() {
    // Define the reference table and document ID
    var referenceTable = 'sn_cd_content_news';
    var referenceDocument = '735b830735d9507354d80735f1c07354';
    
    // Get a specific user to test the insertion
    var userSysId = 'd7aa800ac38951509ba42d4ce0013150'; // Replace with a sys_id from your results

  // Manually check if the favorite already exists
    var favGR = new GlideRecord('sp_favorite');
    favGR.addQuery('user', userSysId);
    favGR.addQuery('reference_table', referenceTable);
    favGR.addQuery('reference_document', referenceDocument);
    favGR.query();

gs.info(favGR.getEncodedQuery());
if (!favGR.next()) {
    gs.info('Inserting new favorite for user: ' + userSysId);
        var newFavGR = new GlideRecord('sp_favorite');
        newFavGR.initialize();
        newFavGR.user = userSysId;
        newFavGR.reference_table = referenceTable;
        newFavGR.reference_document = referenceDocument;
        newFavGR.setWorkflow(false);
        newFavGR.insert();
}
})();

Please see if this works.

Thank you, it worked. And just want to check, is it possible to add this favourite to any new user inserted into sys_user table? We add users through integration.

@vidhya_mouli Yes, you can make small changes in the above script and add it in an onAfter Insert business rule which runs on sys_user table.