Netsuite SuiteTalk – 通过PHP请求客户发票清单
我正在使用Netsuite
PHP Toolkit尝试获取客户的发票清单.我可以毫无问题地拨打电话(使用TransactionSearch),但我很难理解我应该如何获得发票的所有详细信息 – 即发票“标题”详细信息(例如总计,货币,主菜单行等)以及每个行项目的详细信息(净值,应税值,项目等).
我尝试了几种方法: > TransactionSearchAdvanced,指定了返回列,并将returnSearchColumns首选项设置为“false”.这会返回所有单独的行(woo!),但货币和术语之类的东西不会扩展 – 你只需要指定internalId而不是实际的文本(或符号).此外,使用TSA,您是否真的需要指定所需的每一列?即默认真的只是一组空的字段?难道只是说“给我每张发票所有行的所有细节吗? 所以我留下了几个选项,这两个选项都不太合适,即: >两者都要求所有发票并合并数据.这些搜索需要很长时间(性能是我的另一个问题,所以我真的不想这样做. 要么 >找出一种请求条款,货币等数据的方法,以及获取发票行的方法. 我不知道你应该怎么做,在互联网上找不到任何关于它的东西.这是我使用过的最糟糕的接口之一(我使用了一些非常糟糕的接口). 任何帮助将非常感激. 解决方法
就像你一样,我开始尝试使用Web Services API(也称为SuiteTalk).大多数情况下,这是一种令人沮丧的运动,因为我最终发现的是我平常无法做到我想要的东西.那和性能非常糟糕,即使它工作正常也会导致我的项目失败.
与Faz一样,我发现使用RESTlet和Saved Searches的组合比处理Web服务框架更容易,更快捷. 基本上将您的问题分解为以下部分: >保存搜索,返回您想要的结果(跟踪以后需要的内部ID) 第一部分: 第二部分: 例如,这里是我用来从我关心的搜索中获得结果的代码.这是改编自某种灵魂在互联网上的某个地方发布但我遗忘在哪里: 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简介”指南中阅读所有相关内容. 第三部分. 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 我希望有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |