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

Ankur Bawiskar
Tera Patron
Tera Patron

@Gopal14 

have 2 business rules

1) after insert on sys_attachment

2) before delete on sys_attachment

condition should be this for After insert

Table Name = sn_customerservice_case

Script:

(function executeRule(current, previous /*null when async*/ ) {
    var caseId = current.table_sys_id;
        var caseGR = new GlideRecord('sn_customerservice_case');
        if (caseGR.get(caseId)) {
            caseGR.u_attachment = true;
            caseGR.update();
        }
})();

Business rule Before Delete:

Table Name = sn_customerservice_case

Script:

 

(function executeRule(current, previous /*null when async*/ ) {
    var caseId = current.table_sys_id;
        var caseGR = new GlideRecord('sn_customerservice_case');
        if (caseGR.get(caseId)) {
            caseGR.u_attachment = true;
            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 

 

after insert is working fine, when I have added attachment in any case record, attachment is changed to true - working as expected.

 

before delete is not working means, after I have removed the attachment from case record, still it is showing as true only.

 

below is example

there is no attachment

Gopal14_0-1748412812261.png

 

still it is showing as true

 

Gopal14_1-1748412852446.png

 

 

in before delete script 

caseGR.u_attachment = true;

 

is it true or false?

 

Hi @Gopal14 , in the before delete script it should be - 

caseGR.u_attachment = false;

@Gopal14 

it should be before delete and not after delete

Did you add logs and see what came in log for case sysId etc?

whether it's going inside the IF part?

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 

 

it is before delete only

Gopal14_0-1748413586423.png