We've updated the ServiceNow Community Code of Conduct, adding guidelines around AI usage, professionalism, and content violations. Read more

Hardware Assets API

JimFaraone
Tera Contributor

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


JimFaraone_0-1739993708415.png

Thank you

 

1 ACCEPTED SOLUTION

Bert_c1
Kilo Patron

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').

View solution in original post

1 REPLY 1

Bert_c1
Kilo Patron

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').