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.

create record from client script in workflow

daniellethomson
Tera Expert

Scripting isn't my strong suit and I'm sure it's an easy fix but I can't get it. I need to crate a record on the cmdb_ci_server table from within a workflow. I can get the record to create but it's not inputting the values from the variables. Instead it is just inputting what is between the ' ' or for the value of sys_class_name is is just inputting 'server' instead of ESX Server.

Any help would be great! Thanks!

var server = new GlideRecord("cmdb_ci_server");

server.initialize();

server.setValue('ip_address','current.variables.ip_address');

server.setValue('name', 'current.variables.server_name');

server.setValue('sys_class_name', 'current.variables.class');

server.insert();

1 ACCEPTED SOLUTION

Hi Danielle,



I'm Glad that it helped you. If i have answered your question, would you mind marking the Answer Correct and close the thread?



In this case, you can use the below script:


if(current.variables.class == 'ESX Server') {


var server = new GlideRecord("cmdb_ci_esx_server");


server.initialize();


server.ip_address = current.variables.ip_address;


server.name = current.variables.server_name;


server.sys_class_name = current.variables.class;


server.insert();


}


else if(current.variables.class == 'Windows'){


//Do your logic


//You can follow the first If() loop


}


else if(current.variables.class == 'Linux'){


//Do your logic


//You can follow the first If() loop


}



I hope this helps. Please mark correct/helpful based on impact


View solution in original post

13 REPLIES 13

Thanks Amlan, that worked. I was not aware on reserved words but that is very helpful. If you have a moment to answer one more question....



I have three different server classes that an item could be ESX Server, Windows or Linux. If I follow the logic of the following script how do I add an else or if statement to into the other classes?



Thanks for all your help!



if(current.variables.class == 'ESX Server') { //This will check whether the provided Class is 'ESX Server' or not


var server = new GlideRecord("cmdb_ci_esx_server");


server.initialize();


server.ip_address = current.variables.ip_address;


server.name = current.variables.server_name;


server.sys_class_name = current.variables.class;


server.insert();


}



else 'Linux server' or 'Windows Server'


Hi Danielle,



I'm Glad that it helped you. If i have answered your question, would you mind marking the Answer Correct and close the thread?



In this case, you can use the below script:


if(current.variables.class == 'ESX Server') {


var server = new GlideRecord("cmdb_ci_esx_server");


server.initialize();


server.ip_address = current.variables.ip_address;


server.name = current.variables.server_name;


server.sys_class_name = current.variables.class;


server.insert();


}


else if(current.variables.class == 'Windows'){


//Do your logic


//You can follow the first If() loop


}


else if(current.variables.class == 'Linux'){


//Do your logic


//You can follow the first If() loop


}



I hope this helps. Please mark correct/helpful based on impact


Alman,



Could you review my script? It's not creating the record. Thanks!



if(current.variables.server == 'ESX Server') {


var esx = new GlideRecord("cmdb_ci_esx_server");


esx.initialize();


esx.ip_address = current.variables.ip_address;


esx.name = current.variables.server_name;


esx.location = current.variables.location;


esx.insert();


}


else if(current.variables.server == 'Windows Server'){


var windows = new GlideRecord("cmdb_ci_windows_server");


windows.initialize();


windows.ip_address = current.variables.ip_address;


windows.name = current.variables.server_name;


windows.location = current.variables.location;


windows.insert();


}


else if(current.variables.server == 'Linux Server'){


var linux = new GlideRecord("cmdb_ci_linux_server");


linux.initialize();


linux.ip_address = current.variables.ip_address;


linux.name = current.variables.server_name;


linux.location = current.variables.location;


linux.insert();


}


Hi Danielle,



The script looks fine. The only thing I doubt that, OOB there is no such table exists named 'cmdb_ci_windows_server'. Please verify the table name once. If I'm not wrong it should be 'cmdb_ci_win_server', which extends 'Server' table. Apart from that, the rest script seems good to go.


Did you try creating new record choosing the 'server; variable value as 'ESX Server' or 'Linux Server'? Are the choices of the 'server' variables same as 'ESX Server', 'Windows Server' and 'Linux Server'?