通过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
相关产品推荐
相关产品推荐

