How can we insert multiple records in a table through scheduled job.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎02-05-2024 03:39 AM - edited ‎02-09-2024 04:14 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎02-05-2024 05:41 AM
It's a bit hard to say since we don't know much of the background, but generally a good place to check is the reference fields. When you loop a GR you might end up looking at the same record in each loop if you have something like var x = gr.sys_id; Instead you want to use gr.getValue('sys_id') or gr.sys_id.toString() for any field or gr.getUniqueValue() for sys_ids. This way you make sure each of your loops keep using values from the current loop.
For example:
var grs = new GlideRecord("cmdb_ci_auto_data");
grs.addEncodedQuery("u_application_idISNOTEMPTY");
//grs.setLimit(1);
grs.query();
while (grs.next()) {
//gs.print(grs.getAggregate("count")+"@--"+grs.getValue("u_application_id") );
var app_id = grs.u_application_id.toString();
var app_sysid = grs.sys_id.toString();
// calling Rest API
var contact_sub_type = '';
var email = '';
var user_sysid = '';
var smeflag = 0;
var roflag = 0;
var adlflag = 0;
var counter = 0;
var r = new sn_ws.RESTMessageV2('APPDATA', 'GET_APP_TRACK');
r.setStringParameterNoEscape('app_id', app_id);
var response = r.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
var obj = JSON.parse(responseBody);
if (httpStatus == 200) {
for (var i = 0; i < obj.length; i++) {
// gs.info(obj[i].Name);
contact_sub_type = obj[i].Name;
email = obj[i].Email;
var gruser = new GlideRecord('sys_user');
gruser.addQuery('email', email);
gruser.query();
if (gruser.next()) {
user_sysid = gruser.sys_id.toString();
}
if (attribute == 'RGE') {
smeflag = 1;
counter = counter + 1;
var grassoc_check = new GlideRecord('u_associations');
grassoc_check.addQuery('u_association_record', app_sysid);
grassoc_check.addQuery('u_attribute', 'RGE');
grassoc_check.addQuery('operational_status', 1);
grassoc_check.query();
if (grassoc_check.next()) {
grassoc_check.u_user_association = user_sysid;
grassoc_check.setWorkflow(false);
grassoc_check.update();
} else {
var grassoc = new GlideRecord('u_associations');
grassoc.initialize();
grassoc.name = "Application Contacts";
grassoc.u_association_record = app_sysid;
grassoc.u_user_association = user_sysid;
grassoc.operational_status = '1';
//grassoc.sys_class_name = 'u_associations'; unnecessary
grassoc.insert();
}
}
}
}
var grs1 = new GlideRecord('u_associations');
grs1.addQuery('u_association_record', app_sysid);
grs1.addQuery('operational_status', 1);
grs1.query();
var association_record_count = grs1.getRowCount();
if (counter < association_record_count) {
if (smeflag == 0) {
var grSetRetired = new GlideRecord('u_associations');
grSetRetired.addQuery('u_association_record', app_sysid);
grSetRetired.addQuery('u_attribute', 'RGE');
grSetRetired.query();
if (grSetRetired.next()) {
grSetRetired.operational_status = 6;
grSetRetired.setWorkflow(false);
grSetRetired.update();
}
}
}
}
Oh and try to use same convention when naming variables.
grassoc_check, grs1 and grSetRetired make it harder to follow the code. Instead you could just have
grAssocCheck, grAssocActive, grSetRetired for example to unify the code.