Update case (parent) ticket status when task (child) is re-assigned

Gautam Gattu
Mega Expert

Requirement - When task (child) is re-assigned, case (parent) state should be updated to "In Progress" and comments should be added <task> has been re-assigned from <previous.assignment_group> to <current.assignment_group>

Created Business Rule

When - before and Update

===============================

(function onBefore(current, previous) {
    var gr = new GlideRecord('sn_customerservice_case');
    var parentstate = "In Progress";
    var casestate = state[current.state];
    var parentcase = current.parent.getRefRecord();
    var prevasngrp = previous.assignment_group;
    var currasngrp = current.assignment_group;
    if (parentcase.isValidRecord() && prevasngrp != currasngrp) {
    parentcase.state.changesTo(parentstate);
    current.work_notes = "[code]<a href='/" + current.sys_class_name + ".do?sys_id=" + current.sys_id + "'>" + current.number + "</a>[/code]" + "has been re-assigned from" + prevasngrp + "to" + currasngrp;
    gr.update();
    }
})(current, previous);

 

Could you please help in fixing this.

1 ACCEPTED SOLUTION

Gautam Gattu
Mega Expert

I found the solution for the requirement however there are few more features which I incorporated

1. When comments is added in child case, parent case get updated

2. If there is a change in 'assignment group' or 'assigned to', comments get added in parent case 

======================================================================

function onBefore(current, previous) {
    var states = {
        "1": "Open",
        "2": "In Progress",
        "3": "Pending",
        "4": "Closed"
    };
    var currentState = states[current.state];
    var previousState = states[previous.state];
    var parentcase = current.parent.getRefRecord();
    var task = "[code]<a href='/" + current.sys_class_name + ".do?sys_id=" + current.sys_id + "'>" + current.number + "</a>[/code]";
    var notes = current.work_notes.getJournalEntry();
    var parentState = current.parent.state.getDisplayValue();
    var subject = current.short_description;
    var closedat = current.closed_at;
    var asngrp = current.assignment_group.getDisplayValue();
    var asnto = current.assigned_to.getDisplayValue();

    
    if (parentcase.isValidRecord()) {
        if (current.state.changesTo(4)) {
            parentcase.work_notes = gs.getMessage("{0} assigned to {1} has been Closed.\n\n" + "Subject: {2}\n\n" + "Closed Notes: {3}\n\n" + "Closed at :{4}\n\n", [task, asngrp, subject, notes, closedat]);
            //Set Parent case state to In Progress
            current.parent.state.setValue(10);
            parentcase.update();
        } else if (current.state.changesTo(2) || current.state.changesTo(3) && current.work_notes.changes() && (current.assignment_group.changes() || current.assigned_to.changes())) {
            parentcase.work_notes = gs.getMessage("{0} Updated:\n\n" + "State: {1} to {2}\n\n" + "Assignment Group: {3}\n\n" + "Assigned To: {4}\n\n" + "Notes: {5}\n", [task, previousState, currentState, asngrp, asnto, notes]);
            //Set Parent case state to In Progress
            current.parent.state.setValue(10);
            parentcase.update();
        } else if (current.state.changesTo(2) || current.state.changesTo(3) && current.assignment_group.changes()) {
            parentcase.work_notes = gs.getMessage("{0} Updated:\n\n" + "State: {1} to {2}\n\n" + "Assignment Group: {3}\n\n" + "Assigned To: {4}\n", [task, previousState, currentState, asngrp, asnto]);
            //Set Parent case state to In Progress
            current.parent.state.setValue(10);
            parentcase.update();
        } else if (current.state.changesTo(2) || current.state.changesTo(3) && (current.assignment_group.changes() || current.assigned_to.changes())) {
            parentcase.work_notes = gs.getMessage("{0} Updated:\n\n" + "State: {1} to {2}\n\n" + "Assignment Group: {3}\n\n" + "Assigned To: {4}\n", [task, previousState, currentState, asngrp, asnto]);
            //Set Parent case state to In Progress
            current.parent.state.setValue(10);
            parentcase.update();
        } else if (current.state.changesTo(2) || current.state.changesTo(3) && current.work_notes.changes()) {
            parentcase.work_notes = gs.getMessage("{0} Updated:\n\n" + "State: {1} to {2}\n\n" + "Notes: {3}\n", [task, previousState, currentState, notes]);
            //Set Parent case state to In Progress
            current.parent.state.setValue(10);
            parentcase.update();
        } else if (current.state.changesTo(2) || current.state.changesTo(3)) {
            parentcase.work_notes = gs.getMessage("{0} Updated:\n\n" + "State: {1} to {2}\n", [task, previousState, currentState]);
            //Set Parent case state to In Progress
            current.parent.state.setValue(10);
            parentcase.update();
        } else if (current.comments.changes() || current.work_notes.changes()) {
            parentcase.work_notes = gs.getMessage("{0} Updated: \n\n" + "Notes: {1}\n", [task, notes]);
            //Set Parent case state to In Progress
            current.parent.state.setValue(10);
            parentcase.update();
        } else if (current.assignment_group.changes() || current.assigned_to.changes()) {
            parentcase.work_notes = gs.getMessage("{0} Updated: \n\n" + "Assignment Group: {1}\n\n" + "Assigned To: {2}\n", [task, asngrp, asnto]);
            //Set Parent case state to In Progress
            current.parent.state.setValue(10);
            parentcase.update();
        }

    }
}

View solution in original post

16 REPLIES 16

Prateek kumar
Mega Sage

Try below:

(function onBefore(current, previous) {
    var gr = new GlideRecord('sn_customerservice_case');
    var parentstate = "StateNumberHere"; // replace with Inprogress state value
    var casestate = state[current.state];
    var parentcase = current.parent.getRefRecord();
    var prevasngrp = previous.assignment_group;
    var currasngrp = current.assignment_group;
    if (parentcase.isValidRecord() && prevasngrp != currasngrp) {
    parentcase.state = parentstate;
    current.work_notes = "[code]<a href='/" + current.sys_class_name + ".do?sys_id=" + current.sys_id + "'>" + current.number + "</a>[/code]" + "has been re-assigned from" + prevasngrp + "to" + currasngrp;
    gr.update();
    }
})(current, previous);

Please mark my response as correct and helpful if it helped solved your question.
-Thanks

@Prateek kumar - Did not work, neither the parent state is updated nor the comment got added. Is any way to validate if this business rule is getting triggered?

Your Business rule should be on child task table and should be an after BR.

(function onBefore(current, previous) {
var gr = new GlideRecord('sn_customerservice_case');
gr.addQuery('sys_id', current.sys_id);
gr.query();
var parentstate = "StateNumberHere"; // replace with Inprogress state value
if(gr.next()){

var prevasngrp = previous.assignment_group;
var currasngrp = current.assignment_group;
gr.state = parentstate;
gr.work_notes = "[code]<a href='/" + current.sys_class_name + ".do?sys_id=" + current.sys_id + "'>" + current.number + "</a>[/code]" + "has been re-assigned from" + prevasngrp + "to" + currasngrp;
gr.update();
}

})(current, previous);

Please mark my response as correct and helpful if it helped solved your question.
-Thanks

@Prateek kumar - No success. Please find the attached screenshot of the business rule.