1

客观的

我正在处理 Netsuite 中的 SuiteScript 用户事件脚本,该脚本必须通过 HTTP 请求联系外部端点。不幸的是,端点可能需要一些时间来响应。为了尽量减少用户的不便,我试图找到一种异步执行此调用的方法。

问题

不幸的是,用于 HTTP 请求的 nlapiRequestURL() 方法仅在客户端脚本中使用该方法时才接受用于异步使用的回调函数。

到目前为止尝试过

我已经研究过使用 Netsuite 在这些实例中推荐的计划脚本,但是,可以一次排队的计划脚本的同时实例数受到可用手动创建的脚本部署数量的限制. 我们担心如果客户端运行一次修改数千条记录的 csv 更新可能会发生什么。

最后,我尝试使用 XMLHttpRequest,但 SuiteScript 不支持。

4

2 回答 2

4

如果您正在考虑将异步调用适合用户事件脚本,那么我猜您可以设置一个标志(自定义复选框字段)以指示记录需要从外部源更新并将 http 调用推迟到预定脚本. 然后,您可以创建一个计划的脚本来查找标记的记录并使用 nlapiRequestURL 同步调用外部端点。预定的脚本可以遍历记录并更新它们。

您可以让计划的脚本频繁运行或从您的用户事件脚本中触发一个实例。确保您使用部署 ID 和脚本 ID 调用 nlapiScheduleScript。

如果用户需要知道此调用的成功或失败,则将其移至客户端。在您的客户端事件脚本中创建另一个标志并在您进行异步调用时设置它并在调用返回时重置它。当设置客户端标志时,您的保存页面客户端脚本应返回 false,以便用户在更新记录之前无法提交记录。

于 2015-12-15T22:40:33.073 回答
1

nlapiRequestURL()是在服务器端发送 HTTP 请求的唯一方法(即您的情况下的用户事件),XMLHttpRequest服务器端不支持。

在客户端nlapiRequestURL()是一个包装器XMLHttpRequest,它允许异步回调。

预定脚本使 HTTP 请求与记录创建/更新过程异步,但请注意nlapiRequestURL预定脚本本身不是异步的。

但是,一次可以排队的计划脚本的同时实例数受到可用手动创建的脚本部署数量的限制。我们担心如果客户端运行一次修改数千条记录的 csv 更新可能会发生什么。

首先,没有。在普通的 NetSuite 帐户中,可以并行运行的预定脚本的数量始终为 1,即使您创建了数千个部署(它会将它们排队,但本质上不会立即触发它们)。如果购买了 SuiteCloud Plus 许可证,则最多可以达到 15 个。其次,不建议为每个记录更新触发不同的预定脚本,因为您可能会阻止其他预定脚本运行,因为您将有太多排队的预定脚本。

我建议使用一个标志(选项1:公司级脚本参数,可使用nlapiLoadConfiguration/更新/访问nlapiSubmitConfiguration,选项2:使用自定义记录),然后安排另一个计划脚本,每隔几分钟运行一次以检查标志并触发nlapiRequestURL最近创建的记录,

或者

在公司级别的脚本参数中跟踪上次运行时间,并在上次运行后创建的搜索中选择所有记录,并nalpiRequestURL在您的计划脚本中为它们触发,该脚本被部署为每隔几分钟运行一次。

于 2015-12-16T02:39:35.280 回答