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.
4 REPLIES 4

Tanushree Maiti
Giga 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 mark this response as Helpful & Accept it as solution if it assisted you with your question.
Regards
Tanushree Maiti
ServiceNow Technical Architect
Linkedin:

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 mark this response as Helpful & Accept it as solution if it assisted you with your question.
Regards
Tanushree Maiti
ServiceNow Technical Architect
Linkedin:

Ankur Bawiskar
Tera Patron

@IreneBest 

this should work fine

(function executeRule(current, previous) {

    // Run only when closing the child task
    if (!current.state.changesTo('3'))  // replace 3 with your actual closed state value
        return;

    var parentCase = new GlideRecord('sn_customerservice_case');
    if (!parentCase.get(current.parent))
        return;

   var mrvs = parentCase.variables.approved_quantities_backend + '';
if (!mrvs || mrvs == '[]' || JSON.parse(mrvs).length === 0) {
    gs.addErrorMessage('You cannot close this task. The Approved Quantities on the Parent must be completed.');
    current.setAbortAction(true);
}

})(current, previous);

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

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