如何从SuiteTalk中仅获取更改的记录

时间:2014-12-02 17:49:54

标签: netsuite

我正在编写一个程序来查找已更新的所有记录(例如客户),因此我可以将这些更改写入旧数据库。

我的程序使用(例如)CustomerSearchBasic对象向SuiteTalk发送搜索命令。 CustomerSearchBasic对象定义了对所有记录的搜索,并将其lastModifiedDate与上次获得结果时收到的最新lastModifiedDate值进行比较。

我有两个选择:

A)询问lastModifiedDate不早于上次获得结果时收到的最新lastModifiedDate的所有记录。这意味着如果两个记录在同一秒内更新,但上次我只收到第一个,那么这次我将收到它们。这意味着我不会错过更新,但我通常会收到至少一条我已经处理过更新的记录。

B)询问lastModifiedDate晚于上次获得结果时收到的最新lastModifiedDate的所有记录。这意味着如果两个记录在同一秒内更新,但上次我只收到第一个,那么这次我不会收到它们。这意味着我可以错过更新。我没有收到我已经处理过的更新。

所以选项A更安全但更浪费,因为我通常会下载一个我不想处理的记录,而选项B可能会错过一些更新,但不会导致不必要的结果。

你能建议更好的选择吗?

1 个答案:

答案 0 :(得分:1)

这样做的一种方法是为您要处理的每种记录类型引入synced复选框自定义字段。

最初,synced对于所有记录都是F,表示必须将它们同步到旧数据库。

在每个同步周期中,您的程序将搜索synced等于F的所有记录。它会将生成的记录提供给旧数据库。成功处理记录后,您的程序会在NetSuite中将synced字段设置为T

每次在NetSuite中更改记录时,synced字段将再次设置为F。这可以通过手动(取消选中NetSuite表单中的框),客户端脚本或其他方式实现。这将在您的程序的下一个同步周期中将此记录包含在要同步的记录列表中。

此方法的缺点是您必须使synced字段保持最新,尤其是在修改记录时。好处是你永远不会错过更新的记录,并且你永远不会处理更新的记录两次(除非你的程序未能将synced设置为T)。

此方法的另一个好处是,您的程序可能会在同步周期内正常失败,并在下一个周期中从中断处继续。这是因为每个项目都有自己的synced标志。


更好的解决方案

考虑到这一点,您可以将此方法与原始方法结合使用,以消除更改记录时手动更新synced标志的要求。

使用日期/时间synced自定义字段,而不是使用复选框last_synced标记。此last_synced自定义字段可以存储您的程序上次处理此记录的日期和时间。然后,您的搜索将被修改,以返回日期早于记录上次更新日期和时间last_synced日期和时间的所有记录。然后,当您的程序处理给定记录时,它应将其last_synced字段更新为当前日期和时间。

这种混合解决方案具有先前解决方案的优点和两者的缺点。