You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过REST API获取的文件如何保存至NetSuite指定记录?

将外部文件保存到NetSuite指定记录的步骤

方式一:使用SuiteScript 2.x(自定义脚本场景)

如果是在NetSuite内部通过脚本处理,按以下步骤操作:

  • 1. 获取外部文件的二进制内容
    用N/https模块调用外部源的ref地址,获取文件的二进制数据。注意处理HTTP响应状态码,确保请求成功。

  • 2. 创建NetSuite文件记录
    用N/file模块创建文件对象,指定文件名、类型、存储文件夹等信息,保存后得到文件ID。

  • 3. 关联文件到指定记录
    加载目标记录,将文件ID赋值给对应的文件字段(原生附件字段或自定义字段),保存记录完成关联。

代码示例

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 */
define(['N/https', 'N/file', 'N/record'], (https, file, record) => {
    function afterSubmit(context) {
        // 替换为外部源返回的ref和fileName
        const fileRef = 'https://external-source.com/target-file';
        const fileName = 'invoice_2024.pdf';
        
        // 获取外部文件
        const fetchResponse = https.get({url: fileRef});
        if (fetchResponse.code !== 200) {
            throw new Error(`Failed to fetch file: HTTP ${fetchResponse.code}`);
        }
        
        // 创建NetSuite文件
        const newFile = file.create({
            name: fileName,
            fileType: file.Type.PDF, // 根据实际文件类型调整(如Type.CSV、Type.EXCEL)
            content: fetchResponse.body,
            folder: 105, // 替换为目标文件夹的内部ID
            isOnline: true
        });
        const fileId = newFile.save();
        
        // 关联到目标记录(以销售订单为例,替换为你的记录类型和ID)
        const targetRecord = record.load({
            type: record.Type.SALES_ORDER,
            id: 768 // 替换为目标记录ID
        });
        // 替换为你的文件字段ID(原生字段或自定义字段)
        targetRecord.setValue({
            fieldId: 'custbody_external_attachment',
            value: fileId
        });
        targetRecord.save();
    }
    return {afterSubmit: afterSubmit};
});

方式二:使用NetSuite REST API(外部系统集成场景)

如果是外部系统直接和NetSuite集成,按以下步骤调用API:

  • 1. 下载外部文件到本地/内存
    在外部系统中调用ref对应的GET接口,获取文件二进制流。

  • 2. 上传文件到NetSuite
    调用NetSuite REST API的文件创建接口,以multipart/form-data格式上传文件元数据和内容,获取返回的文件ID。

  • 3. 更新目标记录关联文件
    调用目标记录的PATCH接口,将文件ID赋值到对应字段。

请求示例(curl)

# 1. 上传文件到NetSuite
curl -X POST "https://your-account-id.suitetalk.api.netsuite.com/services/rest/record/v1/file" \
  -H "Authorization: OAuth oauth_consumer_key=\"your-key\", oauth_token=\"your-token\", ..." \
  -H "Content-Type: multipart/form-data" \
  -F "name=invoice_2024.pdf" \
  -F "folder=105" \
  -F "fileType=PDF" \
  -F "content=@/local/path/to/downloaded-file.pdf"

# 2. 关联文件到销售订单
curl -X PATCH "https://your-account-id.suitetalk.api.netsuite.com/services/rest/record/v1/salesorder/768" \
  -H "Authorization: OAuth oauth_consumer_key=\"your-key\", oauth_token=\"your-token\", ..." \
  -H "Content-Type: application/json" \
  -d '{"custbody_external_attachment": {"id": "1234"}}' # 替换为上传后返回的文件ID

关键注意事项

  • 权限配置:确保脚本或REST API角色拥有文件创建权限、目标记录的编辑权限,以及访问外部源的权限(如果是SuiteScript,可能需要设置出站权限)。
  • 文件类型匹配:NetSuite支持的文件类型有限,要确保设置的fileType和实际文件格式一致,避免上传失败。
  • 文件夹ID:目标文件夹的内部ID可通过NetSuite界面查看(文件柜中打开文件夹,URL中的id参数即为内部ID)。
  • 外部源访问:如果是SuiteScript调用外部源,需确保NetSuite的出站IP被外部源允许,或者配置认证信息(如API密钥)。

内容的提问来源于stack exchange,提问作者stl4baseball

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:10:02