我正在为销售订单编写简单的用户事件脚本(在我的案例中使用beforeSave条目),该订单读取其中的每个项目行,并根据给定的情况更改项目行中的某些值。
我遇到过的问题:
如果刚刚或之前管理员(角色)更改了销售订单中项目行的某个字段,则我的脚本不应更改此字段。通过N /运行时模块,我可以获得当前的用户角色并验证他刚刚改变了一些内容,但如果在当前编辑"会话之前完成了更改,则无法提供帮助。
如果管理员有任何改变,我怎能知道? 我可以获取销售订单中每个项目行的历史/日志/系统信息吗?
提前致谢
答案 0 :(得分:1)
如果您需要阻止代码更改子列表中的值(在您的情况下是销售订单中的项目列表),仅当管理员是最初设置该值的人员时,我建议使用自定义记录您可以存储管理员更改的每个事务的字段或数据列表。例如,在创建销售订单时,您的beforeSubmit用户事件将创建此数据跟踪自定义记录,并设置一些字段以将其与销售订单一对一地绑定(这意味着每个销售订单有1个自定义记录,但从不超过1,您甚至可以在隐藏字段中将该自定义记录的内部ID存储在销售订单中,这样您就不必在将来的编辑中查找它。在您的自定义记录中,您可以使用长文本字段(我认为限制为100万个字符)来存储表示由管理员设置/更改的字段或值的JSON数据。在每次编辑时,您的用户事件代码应检查与销售订单交互的用户的角色,并相应地读取/更新自定义记录。这适用于创建,编辑,复制等任何内容(对销售订单上的项目列表无法进行内联编辑,因此无需考虑这些内容)。这需要相当数量的代码才能进行每次查找和检查,但自定义记录非常快且使用的治理很少,因此您的用户不应该看到任何显着的性能损失。我认识到这远不是一个理想的解决方案,但它比“总是有帮助的”更加可行。 NetSuite'支持'解。祝你好运,希望这有所帮助!
答案 1 :(得分:1)
Todd的解决方案可行,但获取所有字段ID并将其存储在自定义记录中有点过分,因为您只是想知道某些字段是否有变化。
让一个客户端脚本勾选在Field Changed上运行的复选框将是一个更简单的解决方案。客户端脚本将检测您是否正在跟踪的列或字段(如果需要)。如果是字段,则只需将复选框设置为“T”即可。然后在您的预定脚本上,您只需在更新记录之前选中此复选框。