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

如何通过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目标文件夹名称%22
    
    返回结果中的id字段就是目标文件夹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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:43:16