Service Portal: C.server.update() not keeping values after .then() function

Katherine Rodr1
Giga Contributor

Hi SNOW Community,

I am editing the sc_cat_item widget (OOB) to replace the REQ number for the RITM reference, but it looks like when trying to send the req item to the server and return the ritm reference by using c.server.get() is not working: When I assign the response value into a variable inside the .then(function(){}) it works but if a variable is assigned inside the promise response, outside of it becomes null. Is this a normal behavior?

This is the code I am currently using:

Client Controller

var req2 = '';
var sys_id = 'some SysID'
c.server.get({
  action: "getReqItem",
  generatedID: sys_id
}).then(function(response){
  var answer = response.data.generatedRitm;
  var numberReq = answer.number.toString();
  req2 = numberReq;
  console.log('numberReq ' + numberReq);
});
console.log('req2 ' + req2);

Server Script

if(input && input.action=="getReqItem"){
   if(input.generatedID){
   var grGet = new GlideRecord('sc_req_item'); 
   grGet.addQuery('request', input.generatedID); 
   grGet.query();
   if(grGet.next()){
      data.generatedRitm.sys_id = grGet.sys_id.toString();
      data.generatedRitm.number = grGet.number.toString();
     }
   }
}

Response for numberReq is the request item that it supposed to be (hence server is working), but req2 is coming as empty after replacing it during the promise function. 

Thanks in advance for any help

1 ACCEPTED SOLUTION

Katherine Rodr1
Giga Contributor

In case anyone wonders too: I solved by calling the function after the response, as it seem like it is getting delayed from the server, so when it comes back from the server, the calls have already been made. In my case I've opted for waiting, but that needs to be taken in consideration too 🙂

Here's the full article -> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

https://www.geeksforgeeks.org/javascript-promises/

		c.server.get({
			action: "getReqItem",
			generatedID: sys_id
			}).then(function(response){
	
				//Make this call synchronous
				getDisplayDetails(attributes);
			});

 

View solution in original post

1 REPLY 1

Katherine Rodr1
Giga Contributor

In case anyone wonders too: I solved by calling the function after the response, as it seem like it is getting delayed from the server, so when it comes back from the server, the calls have already been made. In my case I've opted for waiting, but that needs to be taken in consideration too 🙂

Here's the full article -> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

https://www.geeksforgeeks.org/javascript-promises/

		c.server.get({
			action: "getReqItem",
			generatedID: sys_id
			}).then(function(response){
	
				//Make this call synchronous
				getDisplayDetails(attributes);
			});