Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

on submit client script

tushar_ghadage
Tera Contributor

Hi All, 

if some tries to resolve (using an Ui action) the problem record and if there are open problem task records, I want to restrict that and keep the state in fix in progress state only.

 

I am trying this using on submit client script and not business rule because when I try to resolve it state will temporarily move to resolve state but when I refresh it, it will move back to fix in progress. and I don't want that. nor did the client. 

 

so here is the script below -

client script - on submit 

function onSubmit() {
    // Check if state is changing to "Resolved"
    var state = g_form.getValue('state');
    if (state == '106') {
        var problemSysId = g_form.getUniqueValue();

        var ga = new GlideAjax('CheckOpenProblemTasks');
        ga.addParam('sysparm_name', 'hasOpenTasks');
        ga.addParam('sysparm_problem_sys_id', problemSysId);

        ga.getXMLAnswer(function(response) {
            if (response === 'true') {
                g_form.addErrorMessage('There are active Problem Tasks. These need to be closed before resolving the Problem');
                return false;
            } else {
                return true;
            }
        });

        //return false; // Stop default submit until GlideAjax completes
    }

    return true; // Allow submit if not resolving
}
 
script include - 
var CheckOpenProblemTasks = Class.create();
CheckOpenProblemTasks.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    hasOpenTasks: function() {
        var problemSysId = this.getParameter('sysparm_problem_sys_id');
        var gr = new GlideRecord('problem_task');
        gr.addQuery('problem',current.getUniqueValue());
        gr.addActiveQuery(true);
        gr.query();

        if (gr.hasNext()) {
            return 'true';
        }
        return 'false';
    }
}); 
 
but here something seems to be missing as when I try to resolve the problem even when there are active p Task it will get resolved and state will move ahead.
 
please do correct ..
 
thanks 
14 REPLIES 14

I tried using before update br but as I mentioned it gave me the issue where when State was changed to Resolved and then after reloading it was moved back to In Progress on problem 

Hi @tushar_ghadage ,

 

Please check if any script causing this issue with lower order on problem table. Try to deactivate your script and run still facing this same issue

 

Please mark my answer correct and helpful if this works for you

Thanks and Regards,

Sarthak

 

 

HarshitaN
Tera Contributor

Hello @tushar_ghadage 

onSubmit() Client script won't work in this case. You have to use "before update BR".

(function executeRule(current, previous /*null when async*/) {
    if (current.state == "106") {
        var gr = new GlideRecord('problem_task');
        gr.addEncodedQuery('problem=' + current.sys_id + '^active=true');
        gr.query();

        if (gr.hasNext()) {
            gs.addErrorMessage('There are active problem task.');
            current.setAbortAction(true);
        }
    }

})(current, previous);

 

Screenshot 2025-11-19 165630.png


Additionally, change the order of BR, so that your BR executes first.

Thanks and regards,

HN 

I tried that 

as shown in your screen shot state will move to resolve and then after reloading the state will move back to fix in progress that's what I don't want . ( similar is happening with me also ) 

Ankur Bawiskar
Tera Patron
Tera Patron

@tushar_ghadage 

why not hide that Resolve button if any active problem task is there?

💡 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  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader