I want to upload data from attachment button in change request to a table in servicenow.

Hm10
Tera Contributor

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

Jaspal Singh
Mega Patron
Mega Patron

Hi,

Check article by Abhishek and it should help your use case.

Additionally check for CSVParser