我如何将csv数据导入netsuite?

时间:2012-09-10 17:57:35

标签: javascript netsuite

我的问题有了更新。 我真正想知道的是: 如何将csv数据导入netsuite? 好吧,似乎我使用csv导入工具来创建一个映射,并使用这个调用来导入csv nlapiSubmitCSVImport(nlobjCSVImport)。

现在我的问题是:如何遍历对象?! 这让我走了一半 - 我得到了csv数据,但我似乎无法找出如何迭代它以操纵日期。当然,这是预定脚本的重点。

这真让我生气。

@Robert H. 我可以想到为什么要从CSV导入数据的一百万个原因。比如,例如。关于任何公司保留的数据的各种报告,我不想将其保留在文件柜中,我也不想真正保留文件。我只想要数据。我想操纵它,我想输入它。

3 个答案:

答案 0 :(得分:3)

解决方案步骤:

  1. 要上传CSV文件,我们必须使用Suitelet脚本。

    (注意:file - 此字段类型仅适用于Suitelet,并显示在Suitelet页面的主选项卡上。将字段类型设置为文件会在页面中添加文件上传窗口小部件。)

    var fileField = form.addField('custpage_file', 'file', 'Select CSV File');
    var id = nlapiSubmitFile(file);
    
  2. 让我们准备调用Restlet脚本并将文件ID传递给它。

    var recordObj = new Object();
    recordObj.fileId = fileId;
    
    // Format input for Restlets for the JSON content type
    var recordText = JSON.stringify(recordObj);//stringifying JSON
    
    // Setting up the URL of the Restlet
    var url = 'https://rest.na1.netsuite.com/app/site/hosting/restlet.nl?script=108&deploy=1';
    
    // Setting up the headers for passing the credentials
    var headers = new Array();
    
    headers['Content-Type'] = 'application/json';      
    headers['Authorization'] = 'NLAuth nlauth_email=amit.kumar2@mindfiresolutions.com, nlauth_signature=*password*, nlauth_account=TSTDRV****, nlauth_role=3';
    

    (注意:nlapiCreateCSVImport:此API仅支持捆绑软件安装脚本,计划脚本和RESTlet)

  3. 让我们使用nlapiRequestURL调用Restlet:

    // Calling Restlet
    var output = nlapiRequestURL(url, recordText, headers, null, "POST");
    
  4. 使用Setup>提供的导入CSV记录创建映射。导入/导出>导入CSV记录。

  5. Restlet脚本内部从Restlet参数中获取文件ID。使用nlapiCreateCSVImport() API并使用在步骤3中创建的映射ID设置其映射。使用setPrimaryFile()函数设置CSV文件。

    var primaryFile = nlapiLoadFile(datain.fileId);
    var job = nlapiCreateCSVImport();
    job.setMapping(mappingFileId); // Set the mapping
    
    // Set File
    job.setPrimaryFile(primaryFile.getValue()); // Fetches the content of the file and sets it.
    
  6. 使用nlapiSubmitCSVImport()提交。

    nlapiSubmitCSVImport(job); // We are done
    
  7. 我们可以通过另一种方式解决这个问题,虽然既不优选也不建议。(因为如果您的CSV文件中有大量记录,它会消耗大量的API。)< / p>

    假设我们不想使用nlapiCreateCSVImport API,那么让我们从第4步继续。

    1. 只需像我们之前那样获取文件ID,加载文件并获取其内容。

      var fileContent = primaryFile.getValue();
      
    2. 拆分文件的行,然后拆分单词并将值存储到单独的数组中。

      var splitLine = fileContent.split("\n"); // Splitting the file on the basis of lines.
      
      for (var lines = 1,count=0; lines < splitLine.length; lines++)
      {
          var words = (splitLine[lines]).split(","); // words stores all the words on a line
      
          for (var word = 0; word < words.length; word++)
          {
              nlapiLogExecution("DEBUG", "Words:",words[word]);
          }
      }
      

      注意:确保CSV文件中没有其他空行。

    3. 最后从我们在上面创建的数组中创建记录并设置字段值。

      var myRec = nlapiCreateRecord('cashsale'); // Here you create the record of your choice
      
      myRec.setFieldValue('entity', arrCustomerId[i]); // For example, arrCustomerId is an array of customer ID.
      
      var submitRec = nlapiSubmitRecord(myRec); // and we are done
      

答案 1 :(得分:0)

同行NetSuite用户,我一直在使用SuiteScripts但是从未见过nlobjCSVImport对象,也没有看过nlapiSubmitCSVImport ..我查看了文档,它显示了,但是没有页面描述细节,关心分享你的位置得到了文件?

使用CSVImport对象的文档,我可以提供更多帮助。

P.S。我尝试将此消息作为评论发布,但“添加评论”链接由于某种原因未显示。 SOF还是新手

答案 2 :(得分:0)

CSV到JSON:

如果您知道CSV文件的结构,只需执行for循环并将字段映射到相应的nlapiSetValue。

应该非常简单。