- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-13-2023 09:27 AM
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:gs.beginningOfToday()@javascript:gs.endOfToday()^ORsys_updated_onONLast 2 hours@javascript:gs.beginningOfLast2Hours()@javascript: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
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2023 09:09 AM
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);
}
}
})();
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2023 03:07 AM
Hi @AnveshKumar M ,
Yes i changed it to first loop and commented in second loop still records not updating.
Please suggest,
Thanks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2023 03:34 AM
@varma2 ,
Please check this for one final time. 😄
Replace the script in first for loop with the below one and observe system log if you got any exceptions.
try {
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();
}
} catch (ex) {
gs.info('USER SYNC Exception: ' + ex);
}
Anvesh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2023 03:51 AM
Hi @AnveshKumar M ,
Sorry Anvesh that im taking your time too much,
Again i have implimented your code.
Logs didt show anything
'USER SYNC Exception
But i can see the data in logs for
gs.info('User records returned from higher instance : ' + responseResult.length);
Please suggest Anvesh this requirment very priority for me.
Thanks,
Varma
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2023 03:58 AM
Try adding logs in the following if block and see any logs are generated.
if (insertRecord) {
var ins_sys = cmdbServer.insert();
gs.info('User record inserted: ' + ins_sys);
} else if (updateRecord) {
var upd_sys = cmdbServer.update();
gs.info('User record updated:' + upd_sys);
}
Anvesh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2023 04:59 AM
Hi @AnveshKumar M ,
Yes log are getting updated for
User record updated:
But when it comes to user record its not update.
Thanks.