- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-19-2025 11:39 AM
Hello All
I'm trying to collect information about all changes made to a hardware asset. I am querying to sys_audit table but I cannot seem to find that change below. What table do I look at to find this history sys_history_line maybe?
current URL: https://<domian>.servicenowservices.com/api/now/table/sys_audit
Thank you
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-19-2025 12:08 PM
You don't want to query sys_audit, or any of the temporary audit tables such as sys_history_set or sys_history line. Instead create your own audit table (u_audit), with the same fields of sys_audit. Then use a Business rule to tack changes in the new table.
Script logic for the BR would look like:
(function executeRule(current, previous /*null when async*/) {
// create audit history.
var fieldName = "";
var newValue = "";
var oldValue = "";
// gs.info("PAN Audit Incident: " + current.number + ", Field: " + current.fieldname + ", Old: " + current.oldvalue + ", New: " + sarec.newvalue + ".");
if (current.assigned_to != previous.assigned_to) {
fieldName = 'assigned_to';
newValue = current.assigned_to;
oldValue = previous.assigned_to;
createRecord(current, fieldName, newValue, oldValue);
}
if (current.assignment_group != previous.assignment_group) {
fieldName = 'assignment_group';
newValue = current.assignment_group;
oldValue = previous.assignment_group;
createRecord(current, fieldName, newValue, oldValue);
}
if (current.priority != previous.priority) {
fieldName = 'priority';
newValue = current.priority;
oldValue = previous.priority;
createRecord(current, fieldName, newValue, oldValue);
}
if (current.state != previous.state) {
fieldName = 'state';
newValue = current.state;
oldValue = previous.state;
createRecord(current, fieldName, newValue, oldValue);
}
function createRecord(curRec, recFieldName, recNewValue, recOldValue) {
// Create audit record
var panAudit = new GlideRecord('u_pan_audit');
panAudit.initialize();
panAudit.u_documentkey = curRec.sys_id;
panAudit.u_fieldname = recFieldName;
panAudit.u_newvalue = recNewValue;
panAudit.u_oldvalue = recOldValue;
panAudit.u_tablename = 'incident';
panAudit.u_updated_on = curRec.sys_updated_on;
panAudit.u_user = curRec.sys_updated_by;
if (!panAudit.insert()) {
gs.info("PAN Audit Incident: Error creating audit, Table: " + panAudit.u_tablename + ", Field: " + panAudit.u_fieldname + ", Old: " + panAudit.u_oldvalue + ", New: " + panAudit.u_newvalue + ".");
}
}
})(current, previous);
Add "if () {" blocks for each field you're interested in. (The above audit table is named 'u_pan_audit').
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-19-2025 12:08 PM
You don't want to query sys_audit, or any of the temporary audit tables such as sys_history_set or sys_history line. Instead create your own audit table (u_audit), with the same fields of sys_audit. Then use a Business rule to tack changes in the new table.
Script logic for the BR would look like:
(function executeRule(current, previous /*null when async*/) {
// create audit history.
var fieldName = "";
var newValue = "";
var oldValue = "";
// gs.info("PAN Audit Incident: " + current.number + ", Field: " + current.fieldname + ", Old: " + current.oldvalue + ", New: " + sarec.newvalue + ".");
if (current.assigned_to != previous.assigned_to) {
fieldName = 'assigned_to';
newValue = current.assigned_to;
oldValue = previous.assigned_to;
createRecord(current, fieldName, newValue, oldValue);
}
if (current.assignment_group != previous.assignment_group) {
fieldName = 'assignment_group';
newValue = current.assignment_group;
oldValue = previous.assignment_group;
createRecord(current, fieldName, newValue, oldValue);
}
if (current.priority != previous.priority) {
fieldName = 'priority';
newValue = current.priority;
oldValue = previous.priority;
createRecord(current, fieldName, newValue, oldValue);
}
if (current.state != previous.state) {
fieldName = 'state';
newValue = current.state;
oldValue = previous.state;
createRecord(current, fieldName, newValue, oldValue);
}
function createRecord(curRec, recFieldName, recNewValue, recOldValue) {
// Create audit record
var panAudit = new GlideRecord('u_pan_audit');
panAudit.initialize();
panAudit.u_documentkey = curRec.sys_id;
panAudit.u_fieldname = recFieldName;
panAudit.u_newvalue = recNewValue;
panAudit.u_oldvalue = recOldValue;
panAudit.u_tablename = 'incident';
panAudit.u_updated_on = curRec.sys_updated_on;
panAudit.u_user = curRec.sys_updated_by;
if (!panAudit.insert()) {
gs.info("PAN Audit Incident: Error creating audit, Table: " + panAudit.u_tablename + ", Field: " + panAudit.u_fieldname + ", Old: " + panAudit.u_oldvalue + ", New: " + panAudit.u_newvalue + ".");
}
}
})(current, previous);
Add "if () {" blocks for each field you're interested in. (The above audit table is named 'u_pan_audit').