Validate parent case mrvs before closing child task
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 hours ago
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:
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
an hour ago
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);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
53m ago
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
45m ago
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);
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
16m ago
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! 🙏
Ankur
✨ Certified Technical Architect || ✨ 10x ServiceNow MVP || ✨ ServiceNow Community Leader