Validate parent case mrvs before closing child task

IreneBest
Tera Contributor

I have a case (sn_customerservice_case) which has a child task that I don't want to close until a mrvs on the parent is not empty.

I have created a Before Update Business Rule and while this appears to validate correctly if I attempt to close the child task with an empty mrvs, it also does not recognise when the mrvs is not empty and issues an error.

The code is:

(function executeRule(current, previous /*null when async*/) {
   
    var parentCase = new GlideRecord('sn_customerservice_case'); // Adjust table name if needed
    if (parentCase.get(current.parent)) {
       
        var mrvsData = parentCase.variables.approved_quantities_backend;
       
        if (gs.nil(mrvsData) || mrvsData == '[]') {
            gs.addErrorMessage('You cannot close this task. The Approved Quantities on the Parent must be completed.');
            current.setAbortAction(true); // Aborts the save/close action
            return;
        }

    }

})(current, previous);
 
Any help would be appreciated.
1 ACCEPTED SOLUTION

pr8172510
Tera Guru

Hi @IreneBest 
Use this 
Before Update Business Rule:

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

    // Get parent case
    var parentCase = new GlideRecord('sn_customerservice_case');
    if (!parentCase.get(current.parent)) {
        return;
    }

    // Get MRVS value (it comes as JSON string)
    var mrvsValue = parentCase.variables.approved_quantities_backend + ''; // Force to string

    var isEmpty = true;

    // Check if MRVS has valid data
    if (mrvsValue && mrvsValue != '[]' && mrvsValue != '') {
        try {
            var parsed = JSON.parse(mrvsValue);
            if (parsed && parsed.length > 0) {
                isEmpty = false;
            }
        } catch(e) {
            // Invalid JSON - treat as empty
            isEmpty = true;
        }
    }

    // Block closure if MRVS is empty
    if (isEmpty) {
        gs.addErrorMessage('You cannot close this task. The Approved Quantities on the Parent must be completed.');
        current.setAbortAction(true);
    }

})(current, previous);

View solution in original post

9 REPLIES 9

Tanushree Maiti
Tera Patron

Hi @IreneBest 

 

Your are using setAbortAction(). Then why you have added "return;"

Remove Return; line

 

(function executeRule(current, previous /*null when async*/) {
    var parentCase = new GlideRecord('sn_customerservice_case');
    if (parentCase.get(current.parent)) {
       var mrvsData = parentCase.variables.approved_quantities_backend; 
        if (gs.nil(mrvsData) || mrvsData == '[]' || mrvsData == '') {
             gs.addErrorMessage('You cannot close this task. The Approved Quantities on the Parent must be completed.');
            current.setAbortAction(true);
        }
    }

})(current, previous);
Please Accept the solution if it assisted you with your question & Mark this response as Helpful.
Regards
Tanushree Maiti
ServiceNow Technical Architect
LinkedIn: https://www.linkedin.com/in/tanushreemaiti

Thanks for the quick reply.

Unfortunately this did not fix the issue, only made it appear that the task was closed when it wasn't.

Hi @IreneBest 

 

Try this script with Before Update BR 

condition: State changes to Closed 

Sample script:

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

    var parentCase = new GlideRecord('sn_customerservice_case');

    if (parentCase.get(current.parent)) {         

             var mrvsJson = parentCase.variables.approved_quantities_backend;

            var isEmpty = true;

        if (mrvsJson) {

            var parsedData = JSON.parse(mrvsJson);

            if (parsedData.length > 0) {

                isEmpty = false;

            }

        }

        if (isEmpty) {

            gs.addErrorMessage(‘You cannot close this task. The Approved Quantities on the Parent must be completed.');

            current.setAbortAction(true);

        }

 

Please Accept the solution if it assisted you with your question & Mark this response as Helpful.
Regards
Tanushree Maiti
ServiceNow Technical Architect
LinkedIn: https://www.linkedin.com/in/tanushreemaiti

Hi @Tanushree Maiti 

This code has not worked either.

Thanks