gpt4 book ai didi

php - Netsuite SuiteTalk - 通过 PHP 为客户请求发票列表

转载 作者:可可西里 更新时间:2023-10-31 23:19:58 25 4
gpt4 key购买 nike

我正在使用 Netsuite PHP 工具包尝试获取客户的发票列表。我可以毫无问题地调用电话(使用 TransactionSearch),但我很难理解我应该如何获取发票的所有详细信息 - 即发票“抬头”详细信息(例如总计、货币、主菜单行等)以及每个行项目的详细信息(净值、应税值(value)、项目等)。

我尝试了几种方法:

  1. TransactionSearchAdvanced,指定返回列并将 returnSearchColumns 首选项设置为“false”。这会返回所有单独的行(哇!),但货币和术语等内容不会展开 - 您只是指定了 internalId 而不是实际文本(或符号)。另外,对于 TSA,您真的必须指定您想要的每一列吗?即默认真的只是一组空字段吗?难道没有一种方法可以直接说“给我每张发票所有行的所有详细信息吗?”

  2. TransactionSearch,returnSearchColumns 首选项设置为“true”。这给出了单个发票类型记录的列表,所有货币和期限内容都正确填充,但令人沮丧的是,没有一个单独的行项目。它更像是一个总结。

所以我有几个选择,但都不是很可口,即:

  1. 为所有发票执行两者调用并合并数据。这些搜索需要很长时间(性能是我的另一个问题,所以我真的不想这样做。

  1. 找出一种请求条款、货币等数据的方法,以及一种获取发票行的方法。

我不知道您应该如何执行此操作,并且在 Internet 上找不到任何相关信息。这是我用过的最糟糕的界面之一(我用过一些非常糟糕的界面)。

如有任何帮助,我们将不胜感激。

最佳答案

就像您一样,我开始尝试使用 Web 服务 API(又名 SuiteTalk)做事。大多数情况下,这是一种挫败感,因为最终我发现我无法对他们做我想做的事。那而且性能非常糟糕,即使它正常工作也会杀死我的项目。

与 Faz 一样,我发现结合使用 RESTlet 和保存的搜索比处理 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 个结果 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 部署的一部分显示给您。然后由您根据返回的数据执行您想要的操作。

所以我建议你花时间做的事情是

  • 设置 NetSuite IDE
  • 获取并阅读 SuiteScript 开发人员引用文档
  • 找到用您选择的语言创建 REST 客户端代码的好方法。

希望对您有所帮助。

关于php - Netsuite SuiteTalk - 通过 PHP 为客户请求发票列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26885977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com