- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-27-2020 05:07 AM
Hi All,
I have a requirement where a custom field 'Row/Rack location' which extends from the 'cmdb_ci' table needs to be updated on 26 different classes. Currently a Transform map is configured on one target table - cmdb_ci_hardware where it updates the row/rack location field to only this target table.
The requirement is to update around 26 different classes. There is no such mapping exists on those 26 tables.
Is there a way to include more classes on 1 transform map? Can we built a scrip (OnBefore) to customize the mapping?
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-27-2020 06:53 AM
Yes you can. Try it out.
Create a property and store values (tables/classes)
example: incident,problem,change,sc_req_item // mention your classes here
var table = gs.getProperty("YOURPROPERTYNAME HERE").split(","); //this convert the comma separate string to array
for(var i=0; i<table.length; i++){ // this will iterate based on number of table
var gr = new GlideRecord(table[i]);
gr.newRecord();
gr.short_description = 'TEST';
gr.insert();
}
Regards,
JAS
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-27-2020 05:24 AM
Hi Amit,
1 transform map can have only 1 target table.
Possibly you can have this running in onAfter transform script to update it for all other classes.
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-27-2020 05:29 AM
Thanks Ankur for your response. Is there an example you can help me with? What can be the parameters?
Below is the OnBefore script-
(function runTransformScript(source, map, log, target /*undefined onStart*/ ) {
// Add your code here
var sname = source.u_device_name;
var gr = new GlideRecord('cmdb_ci_hardware');
gr.addQuery('name',sname);
gr.addEncodedQuery('sys_class_name!=sn_vul_qualys_ci^sys_class_name!=cmdb_ci_server');
//gr.addEncodedQuery('sys_class_name=u_voice^ORsys_class_name=u_ha_pair^ORsys_class_name=u_appliance');
gr.query();
if(gr.next()){
gr.u_row_rack_location = source.u_rack_name;
gr.update();
}
ignore = true;
})(source, map, log, target);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-27-2020 05:34 AM
Hi Amit,
please try this in onafter for other classes
(function runTransformScript(source, map, log, target /*undefined onStart*/ ) {
// Add your code here
var sname = source.u_device_name;
var gr = new GlideRecord('cmdb_ci_hardware');
gr.addQuery('name',sname);
gr.addEncodedQuery('sys_class_name!=sn_vul_qualys_ci^sys_class_name!=cmdb_ci_server');
//gr.addEncodedQuery('sys_class_name=u_voice^ORsys_class_name=u_ha_pair^ORsys_class_name=u_appliance');
gr.query();
if(gr.next()){
gr.u_row_rack_location = source.u_rack_name;
gr.update();
}
})(source, map, log, target);
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-27-2020 05:53 AM
Hi Amit,
If you need to create multiple records using single GlideRecrod, then use the below script
var table = ["incident","problem"]; // mention your classes here
for(var i=0; i<table.length; i++){ // this will iterate based on number of table
var gr = new GlideRecord(table[i]);
gr.newRecord
gr.short_description = 'TEST';
gr.insert();
}
I hope you can have some sort of script in your transform script.
Regards,
JAS