Scripting help

PK14
Kilo Guru

Hi ServiceNow Experts,

 

I working on an integration with ibot and have an issue generating the value using slice and split. 

I am receiving the respond in the below format. That contains user id, server name and group name in double quotes, all these are separated by a comma.

Server name and group name can have more then one value so its separated with semi colon. 
server name starts after "3": (3 number will vary and is numberical)

Group name starts after "1": (1 number will vary and is numberical)

{"user_id":"gurao","3":"s-app-test.rs.ad.com;WUsers__;sntestcom","1":"test;WUsersgr__;sngrp"}

Values expected are 

userId : gurao
serverName : s-app-test.rs.ad.com;WUsers__;sntestcom

groupName : test;WUsersgr__;sngrp

below is the current script 


var user_id = current.variables.requested_for.user_name;
var userid = current.variables.requested_for.user_name.getDisplayValue();
var mail = current.variables.requested_for.email;

var employeeinfo = current.variables.requested_for.employee_number + ' ' + current.variables.requested_for.first_name + ' ' + current.variables.requested_for.last_name;

var grs = new GlideRecord('sys_user');
grs.addQuery('user_name', current.variables.requested_for.user_name);
grs.query();
if (grs.next()) {
var v1 = grs.user_name;
/
}
var v201 = current.variables.requested_for.user_name;

try {
var r = new sn_ws.RESTMessageV2('Ibot trigger', 'Default GET');
r.setStringParameterNoEscape('user_id', v1);
var response = r.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
} catch (ex) {
var message = ex.message;
}

gs.log('sent ldn response for server ' + responseBody);

var v10 = responseBody.toString();
var values = v10.match(/"(.*?)"/g);

var userId = '';
var serverNames = [];
var groupNames = [];

if (values.length >= 3) {
userId = values[0].slice(1, -1);

for (var i = 1; i < values.length; i++) {
var value = values[i].slice(1, -1);
if (i == 1) {
serverNames = value.split(';');
} else if (i == 2) {
groupNames = value.split(';');
}
}
}

gs.log('Extracted values:');
gs.log('User ID: ' + userId);
gs.log('Server Names: ' + serverNames);
gs.log('Group Names: ' + groupNames);

var gr11 = new GlideRecord('sc_task');
gr11.initialize();
gr11.short_description = 'SOX Servers';
gr11.description = 'User Name: ' + name + '\nEmail: ' + mail + '\nEmployeeNumber: ' + num + '\nUserID: ' + userid;
gr11.setDisplayValue('assignment_group', 'Server Operations');

gr11.request_item = current.sys_id;
gr11.insert();
var instanceURL = gs.getProperty('glide.servlet.uri');

var callbackUrl = instanceURL + 'api/now/table/sc_task/' + gr11.sys_id;
try {
var r1 = new sn_ws.RESTMessageV2('Account', 'POST');
r1.setStringParameterNoEscape('slackChannel', 'notifications');
r1.setStringParameterNoEscape('email_add', current.variables.requested_for.email);
r1.setStringParameterNoEscape('ticketNumber', gr11.number);
r1.setStringParameterNoEscape('callbackUrl', callbackUrl);
r1.setStringParameterNoEscape('useCase', 'Server');
r1.setStringParameterNoEscape('sox_server', '');
r1.setStringParameterNoEscape('lgroups', '');
r1.setStringParameterNoEscape('limit', '');
r1.setStringParameterNoEscape('sysId', gr11.sys_id);

var response1 = r1.execute();
var responseBody1 = response1.getBody();
var httpStatus1 = response1.getStatusCode();
if (response1.getStatusCode() == 201 || response1.getStatusCode() == 200 || response1.getStatusCode() == 202) {
gr11.state = 2;
} else {
gr11.state = 1;
}
gr11.work_notes = response1.getBody();
gr11.update();
} catch (ex) {
var message = ex.message;

}


Please assist on the code.

 

Regards,

Priyanka

2 ACCEPTED SOLUTIONS

PK14
Kilo Guru

Thank You Sushant,

This above script works. 

I need help on another format being sent by ibot.

Below is the format: 
{"user_id":"csahu","3":"test0;serviceDeskTeam:ServiceNowTeam","1":"test1;NetworkingTeam:HRTeam:LeadHeadTeam","12":"test2;OracleTeam:Powerbiteam:sqlteam,unixTeam","55":"test3;workdayteam:Sdteam............................................+n"}

Values expected are below : 

userId : csahu
serverName : test0;test1,test2;test3......can go on. 

groupName : serviceDeskTeam:ServiceNowTeam:NetworkingTeam:HRTeam:LeadHeadTeam:OracleTeam:Powerbiteam:sqlteam,unixTeam:workdayteam:Sdteam......... can go on.

Note : after semicolon(;) it is groupname that separated by colon.

Regards,

Priyanka

 

View solution in original post

@PK14

Can you accept my solution for your original question? and raise the new question for this new format?

This will help other readers to go to correct answer directly and for your new format question we can have different thread.

If my answer has helped with your question, please mark my answer as accepted solution and give a thumb up.
Regards,Sushant Malsure

View solution in original post

7 REPLIES 7

Hi @PK14 :

I get it , following is the updated script now which is based on position of parameters:

try it

 

var test =  {"user_id":"csahu","12":"s-app-prod.rs.ad.com;WUsersprod__;snprodcom","15":"tests;WUsersgr__;sngrp"};

var v10 = JSON.stringify(test);

var values = v10.match(/"(.*?)"/g).toString().replaceAll('"','').split(',');

var userId = values[1];
var serverNames = values[3];
var groupNames = values[5];

gs.log('User ID: ' + userId);
gs.log('Server Names: ' + serverNames);
gs.log('Group Names: ' + groupNames);

 

If my answer has helped with your question, please mark my answer as accepted solution and give a thumb up.
Regards,Sushant Malsure

PK14
Kilo Guru

Thank You Sushant,

This above script works. 

I need help on another format being sent by ibot.

Below is the format: 
{"user_id":"csahu","3":"test0;serviceDeskTeam:ServiceNowTeam","1":"test1;NetworkingTeam:HRTeam:LeadHeadTeam","12":"test2;OracleTeam:Powerbiteam:sqlteam,unixTeam","55":"test3;workdayteam:Sdteam............................................+n"}

Values expected are below : 

userId : csahu
serverName : test0;test1,test2;test3......can go on. 

groupName : serviceDeskTeam:ServiceNowTeam:NetworkingTeam:HRTeam:LeadHeadTeam:OracleTeam:Powerbiteam:sqlteam,unixTeam:workdayteam:Sdteam......... can go on.

Note : after semicolon(;) it is groupname that separated by colon.

Regards,

Priyanka

 

@PK14

Can you accept my solution for your original question? and raise the new question for this new format?

This will help other readers to go to correct answer directly and for your new format question we can have different thread.

If my answer has helped with your question, please mark my answer as accepted solution and give a thumb up.
Regards,Sushant Malsure