SLA cancel condition is not working

nameisnani
Mega Sage

Hi Team , 

 

can anyone please help me on this issue , 

 

I have created SLA on sc_req_item table . 

 

pic 1 

nameisnani_0-1735486686229.png

 

pic 2 

nameisnani_1-1735486712718.png

 

pic 3 

 

nameisnani_2-1735486741457.png

 

 

I have tested this SLA , start , pause and stop condtions are working properly , the issue with cancel condtion . 

 

instead of cancel SLA stage is showing ' completed'  when ritm state is ' closed incomplete '

nameisnani_1-1735487042291.png

 

nameisnani_0-1735487000126.png

 

 

 

can anyone please help me on this issue on cancel conditon , what was the mistake , where i need to update please help me with the steps .

 

Thanks 

1 ACCEPTED SOLUTION

@nameisnani 

I can see the BR is an After BR. Please try changing it to a Before BR and see if that helps.

Thanks,
Rakesh.

View solution in original post

14 REPLIES 14

@Ankur Bawiskar  Yes ankur

Mark Manders
Mega Patron

https://www.servicenow.com/community/developer-forum/cancel-conditon-is-not-working-in-sla-on-ritm-t...


Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark

nameisnani
Mega Sage

@Ankur Bawiskar 

 

nameisnani_0-1735540099156.png

 

nameisnani_1-1735540099157.png

 

 

 

see SLA is not cancelling , i don't know what stoping here .

 

Thanks for quick help , 

 

There was Business rule configured on sc_task , and I am thinking because of that BR , SLA is delaying . 

 

nameisnani_2-1735540099291.png

 

 

(function executeRule(current, previous /*null when async*/ ) {

    //Update RITM State   
    var flag =0;
    var state=current.state;
    var gr = new GlideRecord("sc_task");
    gr.addActiveQuery();
    gr.addQuery("request_item", current.request_item);
    gr.query();
    while (gr.next()) {
    state = gr.state;
    if(state !=3 || state !=4|| state !=7){
//gs.addErrorMessage("Please close the sc_tasks to proceed to Resolved state");
//current.setAbortAction(true);
    flag =1;
    break;
    }}
    var ritmst = new GlideRecord('sc_req_item');
    ritmst.get(current.request_item);
    
    //Update ritm state similar to sctask
    //ritmst.stage = 'fulfillment'; // Update stage after SCTASK is reopened 
    if (flag==0){
    ritmst.state = current.state; 
    ritmst.setWorkflow(false);
    ritmst.update();
    ritmst.setWorkflow(true);
    }
    else {
    ritmst.state = state; 
    ritmst.setWorkflow(false);
    ritmst.update();
    ritmst.setWorkflow(true);
    }
    ritmst.update();
    var reqstate = ritmst.state;
    //Update Request State 
    var req = new GlideRecord('sc_request');
    req.addQuery('sys_id', current.request);
    req.query();
    while (req.next()) {
        req.state = reqstate;
        req.setWorkflow(false);
        req.update();
        req.setWorkflow(true);

        if (reqstate == 3) req.stage = "closed_complete";
        if (reqstate == 4) req.stage = "closed_incomplete";
        if (reqstate == 7) req.stage = "closed_skipped";
        req.setWorkflow(false);
        req.update();
        req.setWorkflow(true);

        if (reqstate == 3) req.request_state = "closed_complete";
        if (reqstate == 4) req.request_state = "closed_incomplete";
        if (reqstate == 7) req.request_state = "closed_skipped";
        req.setWorkflow(false);
        req.update();
        req.setWorkflow(true);
        req.active = "false";
        req.setValue("active", "false");
        //req.setWorkflow(false);
        req.update();
        //req.setWorkflow(true);
        
    }

})(current, previous);

 

There was more setworkflow was written because of that i think issue is happening. 

Could you please provide me the correct or updated script so that I can update? 

@nameisnani 

I can see the BR is an After BR. Please try changing it to a Before BR and see if that helps.

Thanks,
Rakesh.

vishwajeet5550
Mega Guru

use Before Business Rule and cheak it that help for you.