0

我正在为销售订单编写简单的用户事件脚本(在我的例子中使用 beforeSave 条目),它读取其中的每个项目行并根据给定的情况更改项目行中的一些值。

我遇到的问题:

如果销售订单中项目行的某些字段刚刚或不久前被管理员(角色)更改,则此字段不应被我的脚本更改。通过 N/runtime 模块,我可以获得当前用户角色并验证他刚刚更改了某些内容,但如果更改在当前编辑“会话”之前完成,那将无济于事。

如果任何管理员更改了某些内容,我怎么知道?我可以获取销售订单中每个项目行的一些历史记录/日志/系统信息吗?

提前致谢

4

2 回答 2

1

如果仅当管理员是最初设置值的人时才需要防止代码更改子列表(在您的情况下为销售订单上的项目列表)上的值,那么我建议您使用可以存储的自定义记录管理员更改的每个事务的字段或数据列表。例如,在创建销售订单时,您的 beforeSubmit 用户事件将创建此数据跟踪自定义记录并设置一些字段以将其与您的销售订单一对一关联(这意味着每个销售订单都有 1 个自定义记录,但永远不会超过 1,您甚至可以将该自定义记录的内部 ID 存储在隐藏字段中的销售订单中,这样您就不必在以后的编辑中查找它)。在您的自定义记录中,您可以使用长文本字段(我相信限制为 100 万个字符)来存储 JSON 数据,这些数据表示管理员设置/更改的字段或值。在每次编辑时,您的用户事件代码应检查与销售订单交互的用户的角色,并相应地读取/更新自定义记录。这将适用于创建、编辑、复制等任何内容(无法针对销售订单上的项目列表进行内联编辑,因此无需考虑这些)。这需要大量的代码才能每次都进行查找和检查,但是自定义记录非常快并且使用很少的治理,因此您的用户不应该看到任何明显的性能损失。我认识到这远不是一个理想的解决方案,但它比“总是有帮助”的 NetSuite“支持”解决方案更可行。

于 2018-02-27T23:03:58.997 回答
1

Todd 的解决方案会起作用,但是获取所有字段 id 并将其存储在自定义记录中有点矫枉过正,因为您只是想知道某个字段是否有变化。

让一个客户端脚本勾选在 Field Changed 上运行的复选框将是更简单的解决方案。客户端脚本将检测它是否是您正在跟踪的列或字段(如果需要)。如果是字段,则只需将复选框设置为“T”。然后在您的预定脚本上,您只需在更新记录之前选中此复选框。

于 2018-02-28T01:59:55.683 回答