I want to upload data from attachment button in change request to a table in servicenow.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-17-2023 02:47 AM - edited 09-17-2023 05:03 AM
HI
I want to allow user to upload a file from attachment button in change request, then parse this data into a table in servicenow. How can I do this by script. I have this business rule created.
(function executeRule(current, previous /* , g */) {
// Get the current user's sys_id
var currentUserId = gs.getUserID();
gs.log("Business Rule Running"+currentUserId);
var gr = new GlideRecord('sys_attachment');
var firstName = gs. getUser(). getFirstName();
gs.log("FirstName"+firstName);
gr.addQuery('sys_updated_by', firstName);
gr.orderByDesc('sys_created_on');
gr.query();
if (gr.next()) {
var latestFilename = gr.file_name;
// Set the retrieved filename to a field or perform other actions here
current.latest_inserted_filename = latestFilename;
// Log the message
gs.log("Latest inserted filename by user " + currentUserId + ": " + latestFilename);
var dataSourceGR = new GlideRecord('sys_data_source');
dataSourceGR.initialize();
dataSourceGR.setValue('name', latestFilename); // Set the file name in the 'name' field
dataSourceGR.insert();
gs.log("File name inserted into sys_data_source for " + latestFilename + " by user " + currentUserId);
//var grDataSource = new GlideRecord('sys_data_source');
dataSourceGR.addQuery('name', latestFilename); // Use the 'name' field to query by data source name
dataSourceGR.query();
if (dataSourceGR.next())
{
var loader = new GlideImportSetLoader();
var importSetRec = loader.getImportSetGr(dataSourceGR);
var ranload = loader.loadImportSetTable(importSetRec, dataSourceGR);
importSetRec.state = "loaded";
importSetRec.update();
gs.info('Unique value is: ' + importSetRec.getUniqueValue());
var importSetRecSysID = importSetRec.getUniqueValue();
//Create a new Transform Map
gs.log("loader " + loader);
gs.log("importSetRec" + importSetRec);
gs.log("ranload" + ranload);
var transformMapGR = new GlideRecord('sys_transform_map');
transformMapGR.initialize();
transformMapGR.setValue('name', 'Excel_transform_map'); // Set the name of your Transform Map
transformMapGR.setValue('source_table', 'my_excel_sample.xlsx'); // Set the source table
transformMapGR.setValue('target_table', 'u_excel_data'); // Set the target table
transformMapGR.insert();
gs.log("Transform Map created for " + latestFilename + " by user " + currentUserId);
// Trigger the transformation
/* var transformMapSysID = transformMapGR.getUniqueValue();
var importSetRecSysID = importSetGR.getUniqueValue();
var transformWorker = new GlideImportSetTransformerWorker(importSetRecSysID, transformMapSysID);
transformWorker.setBackground(true);
transformWorker.start();
gs.log("Transformation started for " + fileName + " by user " + currentUserId);
*/} else {
gs.log("Attachment not found for user " + currentUserId);
}}
})(current, previous);
which gets the latest uploaded file by user and it runs when insert has been done in sys_attachment table.
1 REPLY 1

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-17-2023 03:03 AM