Business rule issue

Gopal14
Tera Contributor

Hello,

 

 

I want to create a new field called Attachment and type is True/False on Case table.  If a case has an attachment, it should mark the field as true and if not, it should remain false. 

 

Below is my field

 

Gopal14_0-1748407873437.png

 

Business Rule:

 

Gopal14_1-1748407913813.png

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

	if (current.table_name !== 'sn_customerservice_case') {
        return;
    }

    var caseId = current.table_sys_id;

    var attachmentGR = new GlideRecord('sys_attachment');
    attachmentGR.addQuery('table_name', 'sn_customerservice_case');
    attachmentGR.addQuery('table_sys_id', caseId);
    attachmentGR.query();

    var hasAttachments = attachmentGR.hasNext();
  
    var caseGR = new GlideRecord('sn_customerservice_case');
    if (caseGR.get(caseId)) {
        if (caseGR.u_attachment !== hasAttachments) {
            caseGR.u_attachment = hasAttachments;
            caseGR.update();
        }
    }
})();

 

I have written after insert delete BR,  above is my code, I have attached a attachment in one of the case record in case table.

 

I have added that field in list view, always it is showing as false

 

 

 

 

1 ACCEPTED SOLUTION

@Gopal14 

try to exclude the current sysId in query

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

    var caseId = current.table_sys_id;
    var attachmentRec = new GlideRecord('sys_attachment');
    attachmentRec.addQuery('table_sys_id', caseId);
    attachmentRec.addQuery('sys_id', '!=', current.sys_id); // exclude the current one
    attachmentRec.setLimit(1);
    if (!attachmentRec.hasNext()) {
        var caseGR = new GlideRecord('sn_customerservice_case');
        if (caseGR.get(caseId)) {
            caseGR.u_attachment = false;
            caseGR.update();
        }
    }

})();

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

13 REPLIES 13

Gopal14
Tera Contributor

@Ankur Bawiskar 

 

When we are adding multiple attachments every time it will show as true,

 

However if one of the case record is having 4 attachments, Now if we remove 1 attachment, then also it needs to show as true, because we have added 4 attachments this is not happening rightnow

@Gopal14 

then you need to check before making it false if there are other attachments or not

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

    var caseId = current.table_sys_id;
    var attachmentRec = new GlideRecord('sys_attachment');
    attachmentRec.addQuery('table_sys_id', caseId);
    attachmentRec.setLimit(1);
    if (!attachmentRec.hasNext()) {
        var caseGR = new GlideRecord('sn_customerservice_case');
        if (caseGR.get(caseId)) {
            caseGR.u_attachment = false;
            caseGR.update();
        }
    }

})();

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

@Ankur Bawiskar  I have added same script, still after removing one attachment, it is changing to false,

 

Gopal14_0-1748414985958.png

 

@Gopal14 

try to exclude the current sysId in query

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

    var caseId = current.table_sys_id;
    var attachmentRec = new GlideRecord('sys_attachment');
    attachmentRec.addQuery('table_sys_id', caseId);
    attachmentRec.addQuery('sys_id', '!=', current.sys_id); // exclude the current one
    attachmentRec.setLimit(1);
    if (!attachmentRec.hasNext()) {
        var caseGR = new GlideRecord('sn_customerservice_case');
        if (caseGR.get(caseId)) {
            caseGR.u_attachment = false;
            caseGR.update();
        }
    }

})();

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader