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.

Update REQ based on RITM state and stage

Priya Rao
Tera Contributor

Hi all,

 

I have created an order guide, and it contains four different catalog items, each of which follows a different flow. I have used flow design. Now, I want to check the status of each RITM, and if the state and stage of all four RITMs are complete, then I need to update the REQ record for those RITMs. How can I achieve this?

 

Thanks in advance!

@Ankur Bawiskar @Rahul Talreja @Pavankumar_1 @Samaksh Wani @Vishal Birajdar @Dr Atul G- LNG @Hemanth M1 @Saurabh Gupta @Sagar Pagar @Aman Kumar S 

3 ACCEPTED SOLUTIONS

Hi @Priya Rao 

 

Ok so yo need write Business rule as below on RITM table :

 

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

    /* 1. Get the request from current form */
    var request = current.request;

    /* 2. Glide Record on Request item table & check if there is any RITM which is not in closed complete state */
    var grItem = new GlideRecord('sc_req_item');
    grItem.addEncodedQuery('request=' + request + '^state!=3');
    grItem.query();

    if(!grItem.next()){
		/* update request record */
		var grReq = new GlideRecord('sc_request');
		grReq.addQuery('sys_id',request);
		grReq.query();

		if(grReq.next()){
              // set values on request
			  grReq.state = 3;
			  grReq.update();
		}

	}

})(current, previous);

 

VishalBirajdar_0-1696576567748.png

 

VishalBirajdar_1-1696576601918.png

 

Hope this helps....!!

 

 

 

Vishal Birajdar
ServiceNow Developer

I know one thing, and that is that I know nothing.
- Socrates

View solution in original post

 

var request = current.request;
var grRITM = new GlideRecord('sc_req_item');
grRITM.addEncodedQuery('stateNOT IN3,4,7^request=' + request);
grRITM.query();
    if (!grRITM.hasNext()) {
        var req = new GlideRecord('sc_request');
        req.get(request);
        req.state = ''; //Update according to your requirement
    }

 

 

piyushsain_0-1696579344494.png

piyushsain_1-1696579374853.png

 

 

If my answer has helped with your question, please mark my answer as accepted solution and give a thumb up.
Regards,
Piyush Sain

View solution in original post

Pavankumar_1
Mega Patron

Hi @Priya Rao ,

Create after business rule on RITM table and select update and give condition as when state changes to closed complete. In advance use below script

Script:

var grRITM = new GlideRecord('sc_req_item');
grRITM.addQuery('request',current.request); //get RITMS only for the same request
grRITM.addEncodedQuery('state!=3');//state is not closed complete
grRITM.query();
if (!grRITM.next()) {//if we don't have any RITM other than close complete
var grReq = new GlideRecord('sc_request');
if(grReq.get(current.request)){
grReq.stage = 'closed_complete'; //give your stage value
grReq.update();
}
}

 

If it helps please click Accept as Solution/hit the Thumb Icon.
ServiceNow Community MVP 2024.
Thanks,
Pavankumar

View solution in original post

15 REPLIES 15

Vishal Birajdar
Giga Sage

Hi @Priya Rao 

 

As its order guide , then there will be only one Request will be created for all four RITMS.

 

May be can you provide some screenshot for more clarity.

 

 

 

 

Vishal Birajdar
ServiceNow Developer

I know one thing, and that is that I know nothing.
- Socrates

Hi @Vishal Birajdar ,

 

PriyaRao_0-1696575148061.png

Based on the state of these 4 RITM's, (I'll be closed complete) I need to update the state of the REQ to Complete.

Hi @Priya Rao 

 

Ok so yo need write Business rule as below on RITM table :

 

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

    /* 1. Get the request from current form */
    var request = current.request;

    /* 2. Glide Record on Request item table & check if there is any RITM which is not in closed complete state */
    var grItem = new GlideRecord('sc_req_item');
    grItem.addEncodedQuery('request=' + request + '^state!=3');
    grItem.query();

    if(!grItem.next()){
		/* update request record */
		var grReq = new GlideRecord('sc_request');
		grReq.addQuery('sys_id',request);
		grReq.query();

		if(grReq.next()){
              // set values on request
			  grReq.state = 3;
			  grReq.update();
		}

	}

})(current, previous);

 

VishalBirajdar_0-1696576567748.png

 

VishalBirajdar_1-1696576601918.png

 

Hope this helps....!!

 

 

 

Vishal Birajdar
ServiceNow Developer

I know one thing, and that is that I know nothing.
- Socrates

@Vishal Birajdar , Thanks for your response. I tried with this but it's not setting the state of the REQ to Closed Complete when all the RITM's are closed.