我正在使用 Netsuite PHP 工具包尝试获取客户的发票列表。我可以毫无问题地调用电话(使用 TransactionSearch),但我很难理解我应该如何获取发票的所有详细信息 - 即发票“抬头”详细信息(例如总计、货币、主菜单行等)以及每个行项目的详细信息(净值、应税值(value)、项目等)。
我尝试了几种方法:
TransactionSearchAdvanced,指定返回列并将 returnSearchColumns 首选项设置为“false”。这会返回所有单独的行(哇!),但货币和术语等内容不会展开 - 您只是指定了 internalId 而不是实际文本(或符号)。另外,对于 TSA,您真的必须指定您想要的每一列吗?即默认真的只是一组空字段吗?难道没有一种方法可以直接说“给我每张发票所有行的所有详细信息吗?”
TransactionSearch,returnSearchColumns 首选项设置为“true”。这给出了单个发票类型记录的列表,所有货币和期限内容都正确填充,但令人沮丧的是,没有一个单独的行项目。它更像是一个总结。
所以我有几个选择,但都不是很可口,即:
或
我不知道您应该如何执行此操作,并且在 Internet 上找不到任何相关信息。这是我用过的最糟糕的界面之一(我用过一些非常糟糕的界面)。
如有任何帮助,我们将不胜感激。
最佳答案
就像您一样,我开始尝试使用 Web 服务 API(又名 SuiteTalk)做事。大多数情况下,这是一种挫败感,因为最终我发现我无法对他们做我想做的事。那而且性能非常糟糕,即使它正常工作也会杀死我的项目。
与 Faz 一样,我发现结合使用 RESTlet 和保存的搜索比处理 Web 服务框架更容易和更快。
基本上将您的问题分解为这些部分:
第一部分: 所以保存的搜索非常简单。我假设您可以做到这一点,而且您实际上可以在一个地方获得您想要的所有字段。根据我的经验,情况并非总是如此。
第二部分: 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 个结果 block ,这是 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 部署的一部分显示给您。然后由您根据返回的数据执行您想要的操作。
所以我建议你花时间做的事情是
希望对您有所帮助。
关于php - Netsuite SuiteTalk - 通过 PHP 为客户请求发票列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26885977/
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我在理解Enumerator.new方法的工作原理时遇到了一些困难。假设文档中的示例:fib=Enumerator.newdo|y|a=b=1loopdoy[1,1,2,3,5,8,13,21,34,55]循环中断条件在哪里,它如何知道循环应该迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)? 最佳答案 Enumerator使用Fibers在内部。您的示例等效于:require'fiber'fiber=Fiber.newdoa=b=1loopdoFiber.yieldaa,b=b,a+bendend10.times.m
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
从MB升级到新的MBP后,Apple的迁移助手没有移动我的gem。我这次是通过macports安装rubygems,希望在下次升级时避免这种情况。有什么我应该注意的陷阱吗? 最佳答案 如果你想把你的gems安装在你的主目录中(在传输过程中应该复制过来,作为一个附带的好处,会让你以你自己的身份运行geminstall,而不是root),将gemhome:键设置为您在~/.gemrc中的主目录中的路径. 关于通过MacPorts的RubyGems是个好主意吗?,我们在StackOverf
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送