Record producer creating duplicate records in servicenow

msc
Tera Contributor

Hi Everyone,

 

I have an issue in record producer that in record producer creating duplicate records in servicenow.

I was used class less script include to insert record in servicenow to map the producer variables to back record values.

May i know the issue why the record producer creating duplicate values.

10 REPLIES 10

Hi Vishal,

please check the code : iam calling this classless script include in script part record producer.

function submitentitlement() {
    if (producer.action == "Create New") {
        var gr = new GlideRecord("service_entitlement");
        gr.addEncodedQuery("u_category=Vendor Contracted Service^entitlement_name=3rd Party Support^active=true");
        gr.addQuery("u_reference_number", producer.reference_number);
        gr.addQuery("u_value", producer.vendor);
        gr.addQuery("asset", producer.asset);
        gr.query();
        if(gr.next()) {
            gs.addErrorMessage("Entitlement Record not created");
            current.setAbortAction(true);
                   
            }          
         else {
            gr.initialize();
            gr.u_category = producer.category;
            gr.entitlement_name = producer.name;
            gr.account = producer.account;
            gr.asset = producer.asset;
            gr.u_value = producer.vendor;
            gr.start_date = producer.start_date;
            gr.end_date = producer.end_date;
            gr.u_reference_number = producer.reference_number;
            gr.sys_created_by = producer.requested_by;
            gr.insert();
            gs.addInfoMessage("Entitlement Record has been created");
           
         }
       
    } else if (producer.action == "Update") {
        var variableValue = producer.entitlement_fields;
        var parser = JSON.parse(variableValue);
        var gr1 = new GlideRecord('service_entitlement');
        gr1.addEncodedQuery("u_category=Vendor Contracted Service^entitlement_name=3rd Party Support^active=true");
        gr1.query();
        while (gr1.next()) {
            for (var i = 0; i < parser.length; i++) {
                var gr2 = new GlideRecord('service_entitlement');
                gr2.addQuery("u_reference_number", parser[i].reference_number_set);
                gr2.query();
                if (gr2.next()) {
                    gr2.u_value = parser[i].vendor_set;
                    //gr2.u_reference_number = parser[i].reference_number_set;
                    gr2.start_date = parser[i].start_date_set;
                    gr2.end_date = parser[i].end_date_set;
                    gr2.sys_updated_by = producer.requested_by;
                    gr2.update();
                }

            }
        }
            gs.addInfoMessage("Entitlement records are updated");
    }

}
 
msc_0-1706604288322.pngmsc_1-1706604317845.png

 

Hello @msc 

 

Can you let us know on which table record producer has mapped....??

 

 

 

Vishal Birajdar
ServiceNow Developer

I know one thing, and that is that I know nothing.
- Socrates

its a custom table called it as service entitlement table

Hello @msc 

 

I see you have also written script on same table to update or create a record.

You can drop the logic of creating record from your script like below. & Try ot...

 

 

function submitentitlement() {
    if (producer.action == "Create New") {
        var gr = new GlideRecord("service_entitlement");
        gr.addEncodedQuery("u_category=Vendor Contracted Service^entitlement_name=3rd Party Support^active=true");
        gr.addQuery("u_reference_number", producer.reference_number);
        gr.addQuery("u_value", producer.vendor);
        gr.addQuery("asset", producer.asset);
        gr.query();
        if(gr.next()) {
            gs.addErrorMessage("Entitlement Record not created");
            current.setAbortAction(true);
                   
            }          
         
       
    } else if (producer.action == "Update") {
        var variableValue = producer.entitlement_fields;
        var parser = JSON.parse(variableValue);
        var gr1 = new GlideRecord('service_entitlement');
        gr1.addEncodedQuery("u_category=Vendor Contracted Service^entitlement_name=3rd Party Support^active=true");
        gr1.query();
        while (gr1.next()) {
            for (var i = 0; i < parser.length; i++) {
                var gr2 = new GlideRecord('service_entitlement');
                gr2.addQuery("u_reference_number", parser[i].reference_number_set);
                gr2.query();
                if (gr2.next()) {
                    gr2.u_value = parser[i].vendor_set;
                    //gr2.u_reference_number = parser[i].reference_number_set;
                    gr2.start_date = parser[i].start_date_set;
                    gr2.end_date = parser[i].end_date_set;
                    gr2.sys_updated_by = producer.requested_by;
                    gr2.update();
current.setAbortAction(true) //abort the insert of new record 
                }

            }
        }
            gs.addInfoMessage("Entitlement records are updated");
    }

}

 

 

**Note : Not a best practice to use `current.setAbortAction()`

 

Vishal Birajdar
ServiceNow Developer

I know one thing, and that is that I know nothing.
- Socrates

Anil Lande
Kilo Patron

Hi,

Can you please share your script and also share from where this is being called?

 

Please appreciate the efforts of community contributors by marking appropriate response as correct answer and helpful, this may help other community users to follow correct solution in future.
Thanks
Anil Lande