Scheduled job importing data but not updating the existing record

varma2
Mega Sage

Hi All,

 

When ever in production instance newly record created   or updated extisting record in ( user table or group table ) it should be copied in lower instance 

Which mean replica of data when new record created or existing record got updated those change move automativally prod to our lower instance.

Below script in working for newly created records but not updating the existing recoed. please suggest below script should update the existing records as well

Below url is different i have provided for example .

 

 

 

(function () {
	var tableName = "sys_user";
	var RESOURCE_PATH = "/api/now/table/" + tableName;
	var request = new sn_ws.RESTMessageV2();
	request.setEndpoint("https://<YOUR_PROD_INSTNCE>.service-now.com/"+RESOURCE_PATH );
	request.setHttpMethod('GET');
		request.setQueryParameter("sysparm_query", "sys_created_onONToday@javascript&colon;gs.beginningOfToday()@javascript&colon;gs.endOfToday()^ORsys_updated_onONLast 2 hours@javascript&colon;gs.beginningOfLast2Hours()@javascript&colon;gs.endOfLast2Hours()");

	//Eg. UserName="admin", Password="admin" for this code sample.
	var user = 'admin';
	var password = 'admin';
	request.setBasicAuth(user,password);

	//gs.print(JSON.stringify(requestBody));
	//request.setRequestBody(JSON.stringify(requestBody));

	request.setRequestHeader("Accept","application/json");
	var response = request.execute();
	var responseBody = response.getBody();
	gs.print(responseBody);
	var jsonResponse = JSON.parse(responseBody);
	var responseResult = jsonResponse["result"];
	for (var record in responseResult) {
		var cmdbServer = new GlideRecord(sys_user);
		cmdbServer.newRecord();
		var insertRecord = false;
		var recordData = responseResult[record];
		for (var data in recordData) {
			var fieldName = "";
			var fieldValue = "";
			if (fieldName == "sys_id") {
				cmdbServer.setNewGuidValue(fieldValue);
			} else if (typeof recordData[data] == "object") {
				fieldName = data;
				fieldValue = recordData[data]["value"];
				gs.print(fieldName + " : " + fieldValue);
			} else {
				fieldName = data;
				fieldValue = recordData[data];
				gs.print(fieldName + " : " + fieldValue);
			}
			if (fieldName && fieldValue) {
				insertRecord = true;
				cmdbServer.setValue(fieldName, fieldValue);
			}
		}
		if (insertRecord) {
			cmdbServer.insert()
		}
	}
})();

 

 

Please suggest.

Thanks,

Varma 

1 ACCEPTED SOLUTION

Hi @AnveshKumar M ,

 

Thanks you so much your support. I run the job No logs are captured.

 

request.setRequestHeader("Accept","application/json");
var response = request.execute();
var responseBody = response.getBody();
gs.print(responseBody);
var jsonResponse = JSON.parse(responseBody);
var responseResult = jsonResponse["result"];
var recordData = responseResult[record];

var usrGr = new GlideRecord('sys_user');

if(usrGr.get('sys_id', recordData.sys_id)){
try {
new GlideQuery('sys_user')
.where('sys_id', recordData.sys_id)
.update(recordData);
} catch (ex) {
gs.info('VARMA GQ UPDATE ERROR: ' + ex);
}
}else{
try {
new GlideQuery('sys_user')
.insert(recordData);
} catch (ex) {
gs.info('VARMA GQ INSERT ERROR: ' + ex);
}

}
})();

View solution in original post

20 REPLIES 20

AnveshKumar M
Tera Sage
Tera Sage

Hi @varma2 ,

Try using the following code from the first for loop.

 

for (var record in responseResult) {

  var cmdbServer = new GlideRecord(sys_user);

  var insertRecord = false;

  var recordData = responseResult[record];

  for (var data in recordData) {

   var fieldName = "";

   var fieldValue = "";

   if (fieldName == "sys_id") {

    

    if(!cmdbServer.get('sys_id', fieldValue)){

       insertRecord = true;

       cmdbServer.initialize();

       cmdbServer.setNewGuidValue(fieldValue);

    }

   } else if (typeof recordData[data] == "object") {

    fieldName = data;

    fieldValue = recordData[data]["value"];

    gs.print(fieldName + " : " + fieldValue);

   } else {

    fieldName = data;

    fieldValue = recordData[data];

    gs.print(fieldName + " : " + fieldValue);

   }

   if (fieldName && fieldValue) {

    cmdbServer.setValue(fieldName, fieldValue);

   }

  }

  if (insertRecord) {

   cmdbServer.insert();

  }else{

   cmdbServer.update();

  }

 }

 

 

Thanks,
Anvesh

HI @AnveshKumar M ,

 

I have tried above code it not replicated in lower instence whence the scheduled job runs.

Even it not copy new records as wee.

Please suggest.

Thanks,

varma

Hi @varma2 ,

 

Try this script, but while copying the script replace &colon;  with : in line number 7, that is request.setQueryParameter().

 

(function () {
	var tableName = "sys_user";
	var RESOURCE_PATH = "/api/now/table/" + tableName;
	var request = new sn_ws.RESTMessageV2();
	request.setEndpoint("https://<YOUR_PROD_INSTNCE>.service-now.com/"+RESOURCE_PATH );
	request.setHttpMethod('GET');
 request.setQueryParameter("sysparm_query","sys_created_onONToday@javascript&colon;gs.beginningOfToday()@javascript&colon;gs.endOfToday()^ORsys_updated_onONToday@javascript&colon;gs.beginningOfToday()@javascript&colon;gs.endOfToday()");

	//Eg. UserName="admin", Password="admin" for this code sample.
	var user = 'admin';
	var password = 'admin';
	request.setBasicAuth(user,password);

	//gs.print(JSON.stringify(requestBody));
	//request.setRequestBody(JSON.stringify(requestBody));

	request.setRequestHeader("Accept","application/json");
	var response = request.execute();
	var responseBody = response.getBody();
	gs.print(responseBody);
	var jsonResponse = JSON.parse(responseBody);
	var responseResult = jsonResponse["result"];
	for (var record in responseResult) {
		var cmdbServer = new GlideRecord(sys_user);
		//cmdbServer.newRecord();
		var insertRecord = false;
		var updateRecord = false;
		var recordData = responseResult[record];
		for (var data in recordData) {
			var fieldName = "";
			var fieldValue = "";
			
			if (typeof recordData[data] == "object") {
				fieldName = data;
				fieldValue = recordData[data]["value"];
				gs.print(fieldName + " : " + fieldValue);
			} else {
				fieldName = data;
				fieldValue = recordData[data];
				gs.print(fieldName + " : " + fieldValue);
			}
			if (fieldName && fieldValue) {
				if (fieldName == "sys_id") {
					if(cmdbServer.get('sys_id', fieldValue)){
						updateRecord = true;
					}else{
						insertRecord = true;
						cmdbServer.newRecord();
						cmdbServer.setNewGuidValue(fieldValue);
					}
				}else{
					cmdbServer.setValue(fieldName, fieldValue);
				}
			}
		}
		if (insertRecord) {
			cmdbServer.insert();
		}else if(updateRecord){
			cmdbServer.update();
		}
	}
})();

 

 

 

Thanks,
Anvesh

Hi @AnveshKumar M ;

 

i have impimented abouve but its not  importing updated date or new data.

 

Try this script, but while copying the script replace &colon;  with : in line number 7, that is request.setQueryParameter().  ----- I didnt get this. 

below is the line number 7

 

request.setQueryParameter("sysparm_query","sys_created_onONToday@javascript&colon;gs.beginningOfToday()@javascript&colon;gs.endOfToday()^ORsys_updated_onONToday@javascript&colon;gs.beginningOfToday()@javascript&colon;gs.endOfToday()");

 

What need to change in line 7.

 

Please suggest.

 

Thanks,

Varma