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

Hi Gautam,

please update code as below; also did you check what it shows in work notes

var prevasngrp = previous.assignment_group.getDisplayValue();
var currasngrp = current.assignment_group.getDisplayValue();
gr.state = parentstate;

var text = "[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['work_notes'].setJournalEntry(text);

gr.update();

Mark Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.
Thanks
Ankur

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

@Ankur Bawiskar - Thanks for sharing your comments, however it is not working. Apart from business rule is that anything else need to be configured?

Hi Gautam,

So only work notes is not getting updated and state is getting updated?

Is it going inside the if condition?

Regards
Ankur

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

Neither the state nor comments are getting updated.

Hi Gautam,

So it is not getting inside the if condition.

check by adding whether row count is more than 0

Regards
Ankur

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