Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

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);