将记录从 Netsuite 发送到外部系统的最佳方式?

Best ways of sending records from Netsuite to an external system?

我正在尝试集成 Netsuite 以替换部分支付系统。从我们的系统向 Netsuite 发送数据对于 Web 服务来说非常简单,但是如何取回信息呢?比如说,我想在 NetSuite 中创建支付账单作为数据库中的支付记录时将它们添加回我们的系统。

我想到的最简单的解决方案是根据最新插入的交易 ID 进行搜索和过滤,但该字段不接受 greaterThan 运算符,因为它是一个字符串。

Workflows是否可以触发suitescripts?即,当创建 Bill 时,运行此脚本等,然后 post 数据会到达某个端点?

关于如何解决这个问题的任何想法或任何其他建议。

谢谢。

如果您不需要实时,您可以让外部守护程序 运行 通过 Web 服务每隔 X 分钟在 NetSuite 中进行一次搜索查询。守护进程检索尚未发送的记录并将它们发送到外部系统。我在 Spring 集成框架中使用了 java 守护进程,它运行良好。

要监控哪些记录已发送,哪些还未发送,您可以在 NetSuite 中将布尔类型的自定义字段添加到您的付费账单记录中。一旦记录被发送到您的外部系统,您就可以将它设置为 true,这样下一个搜索查询就不会再return它了。

这里有很多很多选项。大卫提到的解决方案是一种选择。您当前的系统需要可用的网络 API(例如 SOAP 或 JSON、REST 等)。

如果您想要接近实时的支付数据,您可以在适用的 NetSuite 记录上构建适当的用户事件脚本,在创建记录时立即将数据推送到应用程序的 API。

如果您想大批量发送数据,您可以编写计划脚本,搜索尚未发送到外部系统的任何记录并发布它们。

您可以构建一个按计划运行的已保存搜索,并将结果的 CSV 文件通过电子邮件发送给某人,然后由某人将其导入外部系统。

顺便说一句,您可以使用 internalidnumber 字段构建您提到的搜索,它将接受大于运算符。更合适的可能是使用按最近排序的 createddate 字段。

您可以使用 nlapiRequestURL(Suite script API) 调用您的端点,并从付款记录中推送信息,例如账单 ID、金额以及您需要的任何其他数据。这个API可以在Netsuite中创建Bill记录的时候调用。因此,您将从 Netsuite 获取实时数据返回到您的系统。

我认为最佳方法取决于许多内部和外部因素。其中一些因素是您的外部系统的响应速度、导出频率 realtime/scheduled、API 外部系统的限制等。以下是基于频率的方法分类:

1.实时导出

(先决条件是高度响应的外部系统) 在支付记录类型(现金 Sale/Invoice)的 AfterSubmit 事件上部署用户事件脚本,并在脚本中使用 nlapiRequestURL SuiteScript API 发送所需数据并实时获得响应。注意:nlapiRequestURL API 有 5 秒的连接超时限制和 45 秒的响应超时限制。如果您的外部服务器可能会超出这些限制,您可能需要考虑其他方法。

2。计划导出

  • 在付款记录类型(现金 Sale/Invoice)上部署计划脚本,查找尚未导出的记录并使用 nlapiRequestURL SuiteScript API 发送数据。此外,在这种方法中,您可以组合多个记录并对外部系统进行一次调用(此批次中有多个记录)并导出数据,而不是在以前的方法中每个记录调用一次。
  • 按照上面 David 的建议,第二种方法是通过 NetSuite Web 服务 (SuiteTalk)。

3。近实时导出 (这种方法有点描述性,我已经列出了高层设计)

  • 为排队消息创建自定义记录。
  • 在付款记录类型(现金 Sale/Invoice)的 AfterSubmit 事件上部署用户事件脚本
  • 在UE内部,使用nlapiGetNewRecord()获取记录数据并将其转储到上面创建的自定义记录中。
  • 仅在 UE 内部,调用 "nlapiScheduleScript" 调用将使用这些消息的预定脚本。需要注意的是,只有当您的用户 运行 脚本具有管理员角色权限时,您才能执行此操作。因此,您可以检查角色 ID,然后执行此行。
  • 对于非管理员角色,您还可以为计划脚本创建一个部署,以获取这些消息并一条一条地使用它们。