就像您一样,我开始尝试使用 Web 服务 API(又名 SuiteTalk)来做事。大多数情况下,这是一种沮丧的练习,因为最终我发现我无法对他们做我想做的事。那和性能很差,即使它运行正常也会杀死我的项目。
与 Faz 一样,我发现使用 RESTlet 和 Saved Searches 的组合比使用 Web 服务框架更容易、更快捷。
基本上将您的问题分解为以下几个部分:
- 已保存的搜索返回您想要的结果(跟踪您以后需要的内部 ID)
- RESTlet 它只是一个 Javascript 文件,用于定义用于返回搜索结果的函数
- 调用 RESTlet 并获取结果的客户端代码。
第一部分:
所以保存的搜索非常简单。我将假设您可以做到这一点,并且您实际上可以在一个地方获得您想要的所有字段。根据我的经验,情况并非总是如此。
第二部分:
RESTlet 涉及更多的步骤,尽管它确实是一件非常简单的事情。让它变得复杂的是让它上传并部署在您的 NetSuite 站点上。如果您还没有安装 NetSuite IDE,我强烈推荐它,只是为了让部署脚本更容易一些。自动完成和工具提示也非常有用。
例如,这是我用来从我关心的搜索中获取结果的代码。这是改编自某位灵魂在互联网某处的帖子,但我忘记了在哪里:
function getSearchResults(){
var max_rows = 1000;
var search_id = 1211;
var search = nlapiLoadSearch(null, search_id);
var results = search.runSearch();
var rows = [];
// add starting point for usage
var context = nlapiGetContext();
startingUsage = context.getRemainingUsage();
rows.push(["beginning usage", startingUsage]);
// now create the collection of result rows in 1000 row chunks
var index = 0;
do{
var chunk = results.getResults(index, index+1000);
if( ! chunk ) break;
chunk.forEach( function(row){
rows.push(row);
index++;
});
}while( chunk.length === max_rows);
// add a line that returns the remaining usage for this RESTlet
context = nlapiGetContext();
var remainingUsage = context.getRemainingUsage();
rows.push(["remaining usage",remainingUsage]);
// send back the rows
return rows;
}
这是您通过传入保存的搜索内部 ID 来准备事情的地方:
var search = nlapiLoadSearch(null, SEARCH_ID);
var resultSet = search.runSearch();
然后代码重复调用 getResults() 以获取 1000 个结果块,这是 NetSuite 的限制。编写完此内容后,您必须将脚本上传到 NetSuite 并对其进行配置和部署。最重要的部分是告诉它为每个动词分配什么功能。在这种情况下,我指定 GET 来执行 getSearchResults。这里有很多工作要做,我不会全部写出来,因为值得你花时间学习这部分。至少足以让 IDE 为您执行此操作 =D。您可以在“RESTlets 简介”指南中阅读所有相关信息。
第三部分。
客户端代码可以是任何你想要的,以你喜欢的方式进行 REST。就我个人而言,我喜欢 Python,因为 requests 库非常棒。
下面是一些 Python 代码示例:
import requests
import json
url = 'https://rest.sandbox.netsuite.com/app/site/hosting/restlet.nl?script=123&deploy=1'
headers = {'Content-Type': 'application/json', 'Authorization':'NLAuth nlauth_account=1234567, nlauth_email=someone@somewhere.com, nlauth_signature=somepassword, nlauth_role=3'}
resp = requests.get(url, headers=headers)
data = resp.json()
该 URL 将作为 RESTlet 部署的一部分显示给您。然后,您可以对返回的数据做任何您想做的事情。
所以我建议你花时间做的事情是
- 设置 NetSuite IDE
- 获取和阅读 SuiteScript 开发人员参考文档
- 寻找一种以您选择的语言创建 REST 客户端代码的好方法。
希望对你有帮助。