Find your people. Pick a challenge. Ship something real. The CreatorCon Hackathon is coming to the Community Pavilion for one epic night. Every skill level, every role welcome. Join us on May 5th and learn more here.

Prevent Duplicate Attachments insertion

sravs99999
Mega Contributor

I have a requirement to display an alert or message when someone tries to insert a attachment of duplicate file name on some record. Can some one guide me how can this be achieved?

I have written a script on 'sys_attachment' table, to abort inserting a new record when some one tries to attach a file with same name of already existing one.

Here is the script:

(function executeRule(current, previous /*null when async*/) {

var iso_attach= new GlideRecord('sys_attachment');

iso_attach.addQuery('table_name', 'u_details');

iso_attach.addQuery('file_name', current.file_name);

iso_attach.addQuery('table_sys_id', current.table_sys_id);

iso_attach.query();

if(iso_attach.next()){

gs.addInfoMessage("hello");

current.setAbortAction(true);

}

})(current, previous);

18 REPLIES 18

jmcagod
Kilo Guru

Hi,  were you able to find a solution for this?? Do you mind sharing it? Thank you!

This is how we have done to restrict duplciate attachments. 

Create a BEFORE BR rule on sys_attachment table on INSERT OR UPDATE

 

Select Advanced

 

and put this script. This basically reads the existing file having same table_sys_id and compares it with current file that is being uploaded. If it matches, then it aborts. 

 

Script:

(function executeRule(current, previous /*null when async*/) {

var gr = new GlideRecord('sys_attachment');

gr.addQuery('table_sys_id',current.getValue('table_sys_id'));

gr.orderByDesc('table_sys_id');

gr.query();

while(gr.next()) {

if(gr.getValue('content_type').toLowerCase() == current.content_type.toLowerCase()) {

//cross verify the contents of this file with the existing file

var   gr1 = new GlideRecord('sys_attachment');

gr1.get(gr.getValue('sys_id'));

var gsa = new GlideSysAttachment();

var binData = gsa.getBytes(gr1);

var strData = Packages.java.lang.String(binData);

//now read the current file contents as well

var   gr2 = new GlideRecord('sys_attachment');

gr2.get(current.getValue('sys_id'));

var gsa1 = new GlideSysAttachment();

var binData1 = gsa1.getBytes(gr2);

var strData1 = Packages.java.lang.String(binData1);

//now compare the content of these 2 files. If equal, don't add again

if(strData == strData1) {

current.setAbortAction(true); 

break;

} 

}

}

})(current, previous);

 

Mark answer correct if you found this helpful

Hi Sangeetha, did you try the code that i shared above?

Yeah, Asifnoor I have tried the same I'm getting the same issue. Is there any way to do validation on the jelly script.
 

Hi Sangeetha,

The code that i have shared is part of BR and it shall not give you that error. I suspect that this error is due to something else. Kindly check the client scripts which are running and try to disable and check it.