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.

Total Attachment size limit

venkateshdhanap
Tera Contributor

Hi,

I have attachment limit size 20 MB.I have given this size limit in "System Properties>Security". But i can attach many files with 15 MB ,15 Mb..etc. How can i restrict total size of all attachments. For examble, if I am attaching   5 files for one Incident, total size of all those 5 files should not exceed 20 MB,How can calculate already attached files when attaching new file for though error?

!Thanks

1 ACCEPTED SOLUTION

manishm
Mega Guru

Hi Venkatesh,



i am not aware of a system property that would do that for you. You can however, write a script to restrict total size.   You can create a business rule before insert in sys_attachment table that checks the cumulative size of all attachments for a particular record. So lets say you are limiting size on the incident table. Something like:



var grInc = new GlideRecord('sys_attachment);


grInc.addQuery('table_name',"incident");


grInc.addQuery('table_sys_id',current.sys_id);


grInc.Query();


var totalSize=0;


while(grInc.next()) {


        totalSize+= parseInt(grInc.size_bytes);


}


if(totalSize+parseInt(current.size_bytes) > <your Size Limit>) {


        gs.addInfoMessage("Attachment size exceeded");


        current.setAbortAction(true);


}



Manish



PS: Mark as Helpful or Correct if this helps or solves your problem


View solution in original post

11 REPLIES 11

Janel
Kilo Sage

This was useful! 

I know this is an old thread so I wanted to share an update with what we did differently.  We used GlideAggregate to quickly get a sum of the record instead of a while. 

Here is an example of a background script for a test against a specific record looking to see if there are more than 500MB worth of attachments on it.  I used the limit variable just for testing.

var aggy = new GlideAggregate('sys_attachment');
aggy.addQuery('table_sys_id', 'b4d3414c938cbd14a45eb1874dba10fe');
aggy.addAggregate('SUM','size_bytes');
aggy.setGroup(false);
aggy.query();

var limit = 524288000;

if(aggy.next()){
    gs.print(aggy.getAggregate('SUM', 'size_bytes'));
    if(aggy.getAggregate('SUM', 'size_bytes') > limit){
        gs.print("so big!");
    }
}

 

Was this as a client catalog script, script include, or a business rule?