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

时间:2015-01-08 17:18:14

标签: web-services workflow netsuite

我正在尝试整合Netsuite来替换部分支付系统。从我们的系统向Netsuite发送数据对于Web服务来说是微不足道的,但是如何获取信息呢。比如说,我想在NetSuite中创建付费帐单作为数据库上的付款记录时,将付费帐单添加回我们的系统。

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

工作流程是否可以触发套件?即,在创建Bill时,运行此脚本等,然后将数据发布到某个终点?

如何处理此问题的任何想法或任何其他建议。

感谢。

4 个答案:

答案 0 :(得分:3)

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

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

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

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

顺便说一句,您可以使用internalidnumber字段构建您提到的搜索,这将接受一个Greater Than运算符。更合适的可能是使用最新订购的createddate字段。

答案 1 :(得分:2)

我认为最好的方法取决于很多内部和外部因素。其中一些因素将是您的外部系统的响应速度,实时/计划的出口频率,外部系统的API限制等。以下是基于频率的方法分类:

<强> 1。实时出口

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

<强> 2。预定出口

  • 在付款记录类型(现金销售/发票)上部署预定脚本,查找尚未导出的记录,并使用nlapiRequestURL SuiteScript API发送数据。此外,在这种方法中,您可以联合多个记录并对外部系统进行一次调用(此批次中有多个记录)并导出数据,而不是前一种方法中每个记录一次调用。
  • 做同样事情的第二种方式是通过上面大卫建议的NetSuite Web服务(SuiteTalk)。

第3。近实时出口 (这种方法有点描述性,我列出了高级设计)

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

答案 2 :(得分:1)

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

要监控哪些记录已发送,哪些记录尚未发送,您可以在NetSuite的付费帐单记录中添加boolean类型的自定义字段。将记录发送到外部系统后,将其设置为true,以便下一个搜索查询不会再次返回该记录。

答案 3 :(得分:1)

您可以使用nlapiRequestURL(套件脚本API)调用终点,并从支付记录中提取Bill id,Amount等所需的任何其他数据。在Netsuite中创建Bill记录时,可以调用此API。因此,您将从Netsuite获取实时数据到您的系统。