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

sushantmalsure
Mega Sage
Mega Sage

I have tried something similar in BG script and found working considering your example Json,

you can adapt it in your script:

 

var test = {"user_id":"gurao","3":"s-app-test.rs.ad.com;WUsers__;sntestcom","1":"test;WUsersgr__;sngrp"};
var convert = JSON.stringify(test);
var parser = new JSONParser();

var result = parser.parse(convert);
gs.print('userId : '+result.user_id);
gs.print('serverName :  '+result[3]);
gs.print('groupName : '+result[1]);
If my answer has helped with your question, please mark my answer as accepted solution and give a thumb up.
Regards,Sushant Malsure

Hi Sushant,

ServerName "3" and Group name "1" can vary and could be any number. What to do in that scenerio?

 

 

ohh then is position of this server name and group name is fixed in json? Also do you have examples for these server name and group name paramters?

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

position from ibot to sn is userID, server name, group name.

Two Example of the format : 

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

Values expected are below : 
userId : gurao
serverName : s-app-test.rs.ad.com;WUsers__;sntestcom

groupName : test;WUsersgr__;sngrp

2. {"user_id":"csahu","12":"s-app-prod.rs.ad.com;WUsersprod__;snprodcom","15":"tests;WUsersgr__;sngrp"}
Values expected are below : 

userId : csahu
serverName : s-app-prod.rs.ad.com;WUsersprod__

groupName : tests;WUsersgr__;sngrp