4

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

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

这真的让我发疯。

@Robert H 我能想到一百万个为什么要从 CSV 导入数据的原因。以计费为例。关于任何公司保存的数据的各种报告,我不想把它放在文件柜里,我也不想把文件放在所有的地方。我只想要数据。我想操纵它,我想进入它。

4

3 回答 3

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 仅支持 bundle 安装脚本、计划脚本和 RESTlet)

  3. 让我们使用以下命令调用 Restlet nlapiRequestURL

    // Calling Restlet
    var output = nlapiRequestURL(url, recordText, headers, null, "POST");
    
  4. 使用设置 > 导入/导出 > 导入 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
    

还有另一种方法可以解决这个问题,尽管既不优选也不建议。(因为如果您的 CSV 文件中有大量记录,它会消耗大量 API。)

假设我们不想使用nlapiCreateCSVImportAPI,那么让我们从第 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
    
于 2013-09-04T14:19:55.613 回答
0

CSV 转 JSON:

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

应该很简单。

于 2013-06-26T13:15:43.220 回答
0

在这里的 NetSuite 用户,我已经使用 SuiteScripts 有一段时间了,但从未见过 nlobjCSVImport 对象或 nlapiSubmitCSVImport .. 我查看了文档,它显示,但没有描述详细信息的页面,请注意分享你从哪里获得文档从?

借助 CSVImport 对象的文档,我或许可以提供更多帮助。

PS 我尝试将此消息作为评论发布,但“添加评论”链接由于某种原因没有出现。SOF 还是新手

于 2012-09-11T19:56:14.997 回答