Using the word 'class' breaks my script

Ken Berger
Giga Guru

Hi folks,

 

Working on a script to bring in some JSON from a webhook and populate a table with it.  One of the JSON fields is called 'class' and when I reference it in my script, I am getting the error below:

KenBerger_2-1708104111245.png

and it breaks another script I am working on to raise incidents:

KenBerger_1-1708103690263.png

I loaded my script into an online JavaScript checker and it came back clean so I suspect it is something with the way ServiceNow is handling the script.  Here is my code:

(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

	var bodyString = request.body.dataString + '';
    var requestObj = JSON.parse(bodyString + '');
	
	var database = new GlideRecord('u_rubrik_notifications');

	database.initialize();
	database.setValue('u_class',requestObj.class);  //This is the line that breaks the script
	database.setValue('u_summary',requestObj.summary);
	database.setValue('u_severity',requestObj.severity);
	database.setValue('u_source',requestObj.source);
	database.setValue('u_location',requestObj.custom_details.location);	
	database.setValue('u_timestamp',requestObj.timestamp);
	database.setValue('u_audituserid',requestObj.custom_details.auditUserId);
	database.setValue('u_auditusername',requestObj.custom_details.auditUserName);
	database.setValue('u_clusterid',requestObj.custom_details.clusterId);
	database.setValue('u_id',requestObj.custom_details.id);	
	database.setValue('u_seriesid',requestObj.custom_details.seriesId);
	database.setValue('u_status',requestObj.custom_details.status);
	database.setValue('u_errorcode',requestObj.custom_details.errorCode);
	database.setValue('u_errorid',requestObj.custom_details.errorId);
	database.setValue('u_errorreason',requestObj.custom_details.errorReason);
	database.setValue('u_errorremedy',requestObj.custom_details.errorRemedy);	
	database.setValue('u_objectid',requestObj.custom_details.objectId);
	database.setValue('u_objectname',requestObj.custom_details.objectName);
	database.setValue('u_objecttype',requestObj.custom_details.objectType);
	
database.insert();

})(request, response);

Here is a sample of the JSON we are receiving:

{
	"summary":"Started replicating logs for Microsoft SQL Server Database 'fakeDB' on 'MY-FAKESERVER\\\\MYARCHIVE' from 'MY-CLUSTER' to 'CLUSTER-NAME'",
	"source":"some-system-id | some-other-system-id",
	"severity":"info",
	"timestamp":"2024-02-14T14:28:51.821Z",
	"class":"Replication",
	"custom_details":{"seriesId":"4c4de3e2-e512-4039-af47-7a29d88363c5",
	"id":"59575c16-1c9f-4b3a-93d6-d904653892bc",
	"type":"Event",
	"objectId":"fdf2458a-039c-5d34-bc03-667da1800a3e",
	"objectName":"fakeDB",
	"objectType":"Mssql",
	"status":"Running",
	"clusterId":"some-other-randon-string-of-characters",
	"clusterName":"MY-CLUSTER",
	"eventName":"Mssql.LogReplicationStarted",
	"errorId":"",
	"errorCode":"",
	"errorRemedy":"",
	"errorReason":"",
	"auditUserName":"",
	"auditUserId":"",
	"location":"MY-LOCATION\\MYARCHIVE",
	"url":""}
}

If anyone has an idea how to make this work in ServiceNow, I would be very grateful.

 

Thanks,

Ken

1 ACCEPTED SOLUTION

We were able to get it to work like so:

 

(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

	var bodyString = request.body.dataString + '';
    var requestObj = JSON.parse(bodyString + '');
	var bodyStringClass = bodyString.split('class":"')[1].split('"')[0];
	
	var database = new GlideRecord('u_rubrik_notifications');

	database.initialize();
	database.setValue('u_class',bodyStringClass);
	database.setValue('u_summary',requestObj.summary);
	database.setValue('u_severity',requestObj.severity);
	database.setValue('u_source',requestObj.source);
	database.setValue('u_location',requestObj.custom_details.location);	
	database.setValue('u_timestamp',requestObj.timestamp);
	database.setValue('u_audituserid',requestObj.custom_details.auditUserId);
	database.setValue('u_auditusername',requestObj.custom_details.auditUserName);
	database.setValue('u_clusterid',requestObj.custom_details.clusterId);
	database.setValue('u_id',requestObj.custom_details.id);	
	database.setValue('u_seriesid',requestObj.custom_details.seriesId);
	database.setValue('u_status',requestObj.custom_details.status);
	database.setValue('u_errorcode',requestObj.custom_details.errorCode);
	database.setValue('u_errorid',requestObj.custom_details.errorId);
	database.setValue('u_errorreason',requestObj.custom_details.errorReason);
	database.setValue('u_errorremedy',requestObj.custom_details.errorRemedy);	
	database.setValue('u_objectid',requestObj.custom_details.objectId);
	database.setValue('u_objectname',requestObj.custom_details.objectName);
	database.setValue('u_objecttype',requestObj.custom_details.objectType);
	
database.insert();

})(request, response);

View solution in original post

3 REPLIES 3

Brad Bowman
Kilo Patron
Kilo Patron

Hi Ken,

Try use bracket notation:

database.setValue('u_class',requestObj[class]);

 

Ken Berger
Giga Guru

Hi Brad,

 

Thanks for you help.  I am getting the following:

 

KenBerger_0-1708109473369.png

Best,

Ken

We were able to get it to work like so:

 

(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

	var bodyString = request.body.dataString + '';
    var requestObj = JSON.parse(bodyString + '');
	var bodyStringClass = bodyString.split('class":"')[1].split('"')[0];
	
	var database = new GlideRecord('u_rubrik_notifications');

	database.initialize();
	database.setValue('u_class',bodyStringClass);
	database.setValue('u_summary',requestObj.summary);
	database.setValue('u_severity',requestObj.severity);
	database.setValue('u_source',requestObj.source);
	database.setValue('u_location',requestObj.custom_details.location);	
	database.setValue('u_timestamp',requestObj.timestamp);
	database.setValue('u_audituserid',requestObj.custom_details.auditUserId);
	database.setValue('u_auditusername',requestObj.custom_details.auditUserName);
	database.setValue('u_clusterid',requestObj.custom_details.clusterId);
	database.setValue('u_id',requestObj.custom_details.id);	
	database.setValue('u_seriesid',requestObj.custom_details.seriesId);
	database.setValue('u_status',requestObj.custom_details.status);
	database.setValue('u_errorcode',requestObj.custom_details.errorCode);
	database.setValue('u_errorid',requestObj.custom_details.errorId);
	database.setValue('u_errorreason',requestObj.custom_details.errorReason);
	database.setValue('u_errorremedy',requestObj.custom_details.errorRemedy);	
	database.setValue('u_objectid',requestObj.custom_details.objectId);
	database.setValue('u_objectname',requestObj.custom_details.objectName);
	database.setValue('u_objecttype',requestObj.custom_details.objectType);
	
database.insert();

})(request, response);