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.

Cannot add table to import set

Hm10
Tera Contributor

This BR runs until this log gs.log("File name inserted into sys_data_source for " + latestFilename + " by user " + currentUserId);
, and then it gives me false in if(ranout). I am trying to get file from user attachment in Change Request and then parse it into a table,

 

 

 

(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().toLowerCase();
  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 loader = new GlideImportSetLoader();
    var importSetRec = loader.getImportSetGr(dataSourceGR);
    var ranload = loader.loadImportSetTable(importSetRec, dataSourceGR);
    importSetRec.state = "loaded";
    importSetRec.update();

    // Ensure the Import Set has been successfully loaded before creating a Transform Map
    if (ranload) {
      // Create a new Transform Map
      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', importSetRec.getUniqueValue()); // Set the source table to the Import Set sys_id
      transformMapGR.setValue('target_table', 'u_excel_data'); // Set the target table
      transformMapGR.insert();

      gs.log("Transform Map 'Excel_transform_map' created.");

      // Trigger the transformation (uncomment and modify as needed)
      /*
      var transformMapSysID = transformMapGR.getUniqueValue();
      var importSetRecSysID = importSetRec.getUniqueValue();
      var transformWorker = new GlideImportSetTransformerWorker(importSetRecSysID, transformMapSysID);
      transformWorker.setBackground(true);
      transformWorker.start();
      gs.log("Transformation started for " + latestFilename + " by user " + currentUserId);
      */
    } else {
      gs.log("Import Set could not be loaded. Check your data source.");
      gs.log("ranload: " + ranload);
      gs.log("Error message, if any: " + importSetRec.getLoadErrorMessage());
    }
  } /* else {
    gs.log("Attachment not found for user " + currentUserId);
  } */
})(current, previous);

 

 

 

 

10 REPLIES 10

Hm10
Tera Contributor

hi @palanikumar 

Please can you check this. This is what I have done now.

1. Created Data Source of Type File and Format is Excel.

2. Created Transform Map. 

3. Now that I have Data Source and a Transform Map setup. 

used this code in Business Rule 

 

(function executeRule(current, previous /*null when async*/) {

	// Add your code here
	var ImportUtilObj = new Import_Util();
var areAttachmentsValid = ImportUtilObj.validateAttachments(current.getTableName(),current.sys_id);
if(areAttachmentsValid)
	{
		gs.log("Valid Attachments");
	var dataSource=ImportUtilObj.getDataSourceByName('19datasource');
	var transformMap= ImportUtilObj.getTransformMapByName('19transform_map');
	ImportUtilObj.loadAttachmentforDataSource(dataSource,current.getTableName(),current.sys_id);
	var importSetRec=ImportUtilObj.importAndTransformExcel(dataSource,transformMap);
		gs.log("import set"+importSetRec);
		
}

})(current, previous);

 

 

Images of Transform map and data source

Hm10_0-1695133125083.pngHm10_1-1695133216219.png

This is my script include.

 

var Import_Util = Class.create();
Import_Util.prototype = {

    initialize: function() {},
    getDataSourceByName: function(dataSourceName) {

        //get the DataSource
        var dataSource = new GlideRecord('sys_data_source');
        dataSource.get('name', dataSourceName);
        return dataSource;

    },

    loadAttachmentforDataSource: function(dataSource, table_name, table_sys_id) {

        //delete all the attachments before attaching a new CSV file
        var attach = new GlideSysAttachment();
        attach.deleteAll(dataSource);
        //Attach the new CSV after deleting all the old CSV'
        GlideSysAttachment.copy(table_name, table_sys_id, 'sys_data_source', dataSource.sys_id);

    },

    importAndTransformExcel: function(dataSource, transformMap) {

        // Process data source file
        var loader = new GlideImportSetLoader();
        var importSetRec = loader.getImportSetGr(dataSource);
        var ranload = loader.loadImportSetTable(importSetRec, dataSource);
        importSetRec.state = "loaded";
        importSetRec.update();

        // Transform import set
        var transformWorker = new GlideImportSetTransformerWorker(importSetRec.sys_id, transformMap.sys_id);
        transformWorker.setBackground(true); // if you want to run it in Foreground then set it to False
        transformWorker.start();
        return importSetRec;

    },

    getTransformMapByName: function(transformMapName) {

        //get the DataSource
        var transformMap = new GlideRecord('sys_transform_map');
        transformMap.get('name', transformMapName);
        return transformMap;

    },
    validateAttachments: function(table_name, table_sys_id) {
        var attachment = new GlideRecord('sys_attachment');
        attachment.addQuery('table_name', table_name);
        attachment.addQuery('table_sys_id', table_sys_id);
        attachment.query();

        var multiple_attchmentCheck = attachment.getRowCount();
        if (multiple_attchmentCheck > 1) {
            gs.addErrorMessage('Please attach only one Excel file, multiple attachments are not supported');
            attachment.deleteMultiple();
            return false;
        } else if (multiple_attchmentCheck == 0) {
            gs.addErrorMessage('Please attach atleast one Excel file');
            return false;
        } else
            return true;
    },
    type: 'Import_Util'
};

 

Can you please explain what is the issue with this ?