如何通过Salesforce REST API在NetSuite拖拽式文件柜创建文件?
NetSuite文件柜REST API操作指南(基于Salesforce Apex)
1. 获取文件柜文件夹ID
- 后台直接查看:登录NetSuite沙箱,进入文件柜,点击目标文件夹后,浏览器地址栏末尾的数字即为文件夹ID(例如
https://xxxx.app.netsuite.com/app/common/media/mediaitemfolders.nl?id=123中的123)。 - REST API查询:使用
folder记录端点过滤查询,请求示例:
返回结果中的GET https://[your-sandbox-account-id].suitetalk.api.netsuite.com/services/rest/record/v1/folder?q=name%3D%22目标文件夹名称%22id字段就是目标文件夹ID。
2. REST API实现文件创建与查询(无需SOAP/Suitelet)
创建文件到指定文件夹
使用file记录端点,采用OAuth 1.0+HMAC-SHA256认证:
- 端点:
POST https://[your-sandbox-account-id].suitetalk.api.netsuite.com/services/rest/record/v1/file - 请求体(JSON格式,文件内容需Base64编码):
{ "name": "测试文件.txt", "folder": {"id": "123"}, "content": "SGVsbG8gTmV0U3VpdGUh", "fileType": "PLAINTEXT" }fileType支持PLAINTEXT、CSV、PDF、EXCEL等枚举值,可参考NetSuite官方文档的file记录字段说明。
查询文件
- 查询所有文件:
GET https://[your-sandbox-account-id].suitetalk.api.netsuite.com/services/rest/record/v1/file - 按文件夹过滤查询:
GET https://[your-sandbox-account-id].suitetalk.api.netsuite.com/services/rest/record/v1/file?q=folder.id%3D123 - 按文件名查询:
GET https://[your-sandbox-account-id].suitetalk.api.netsuite.com/services/rest/record/v1/file?q=name%3D%22测试文件.txt%22
3. Salesforce Apex代码实现示例
获取文件夹ID的Apex代码
public class NetSuiteFolderQuery { public static String getFolderId(String folderName) { String baseUrl = 'https://[your-sandbox-account-id].suitetalk.api.netsuite.com/services/rest/record/v1/folder'; String queryUrl = baseUrl + '?q=name%3D%22' + EncodingUtil.urlEncode(folderName, 'UTF-8') + '%22'; HttpRequest req = new HttpRequest(); req.setEndpoint(queryUrl); req.setMethod('GET'); // 复用现有Salesforce-NetSuite的OAuth 1.0认证头逻辑 req.setHeader('Authorization', 'OAuth oauth_consumer_key="xxx", oauth_token="xxx", oauth_signature_method="HMAC-SHA256", oauth_timestamp="xxx", oauth_nonce="xxx", oauth_version="1.0", oauth_signature="xxx"'); Http http = new Http(); HttpResponse res = http.send(req); if(res.getStatusCode() == 200) { Map<String, Object> responseMap = (Map<String, Object>)JSON.deserializeUntyped(res.getBody()); List<Object> items = (List<Object>)responseMap.get('items'); if(items != null && !items.isEmpty()) { Map<String, Object> folder = (Map<String, Object>)items[0]; return (String)folder.get('id'); } } return null; } }
创建文件的Apex代码
public class NetSuiteFileCreator { public static Boolean createFile(String fileName, String folderId, String fileContent, String fileType) { String baseUrl = 'https://[your-sandbox-account-id].suitetalk.api.netsuite.com/services/rest/record/v1/file'; Map<String, Object> fileData = new Map<String, Object>{ 'name' => fileName, 'folder' => new Map<String, Object>{'id' => folderId}, 'content' => EncodingUtil.base64Encode(Blob.valueOf(fileContent)), 'fileType' => fileType }; HttpRequest req = new HttpRequest(); req.setEndpoint(baseUrl); req.setMethod('POST'); req.setHeader('Content-Type', 'application/json'); // 复用现有OAuth 1.0认证头逻辑 req.setHeader('Authorization', 'OAuth oauth_consumer_key="xxx", oauth_token="xxx", oauth_signature_method="HMAC-SHA256", oauth_timestamp="xxx", oauth_nonce="xxx", oauth_version="1.0", oauth_signature="xxx"'); req.setBody(JSON.serialize(fileData)); Http http = new Http(); HttpResponse res = http.send(req); return res.getStatusCode() == 201; } }
内容的提问来源于stack exchange,提问作者Salesforce Sam
相关产品推荐
相关产品推荐

