套件脚本;用户事件脚本中的异步 HTTP 请求

SuiteScript; Asynchronous HTTP request inside of user event script

Objective

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

问题

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

目前已尝试

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

最后,我试过只使用 XMLHttpRequest,但 SuiteScript 不支持它。

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

您可以经常制作预定脚本 运行 或从您的用户事件脚本中触发一个实例。确保您使用部署 ID 和脚本 ID 调用 nlapiScheduleScript。

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

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

在客户端 nlapiRequestURL()XMLHttpRequest 的包装器,因此它允许异步回调。

计划脚本使 HTTP 请求与记录 creation/update 进程异步,但请注意计划脚本本身的 nlapiRequestURL 不是异步的。

however, the number of simultaneous instances of a scheduled script which can be queued at one time is limited by the number of manually created script deployments that are available. We're concerned about what might happen if the client runs a csv update that modifies thousands of records at one time.

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

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

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