贺享乐
基于标准API进行开发时,Netsuite不能直接在数据库层面去重,怎么实现数据唯一性处理?
原创 贺享乐 爱记不记的记忆碎片
你问我答
爱记不记
>>>>
问
基于标准API进行开发时,Netsuite不能直接在数据库层面去重,怎么实现数据唯一性处理?
答
在标准Netsuite中,不支持数据库直接操作更新创建,代码只支持api操作,而在api中,没有像数据库那样建唯一性索引来防止重复的操作,所以我们根据各个场景来用代码限制,防止数据重复。
在Netsuite中,有时用户会快速重复点击,或者在网速不佳的时候,会延时代码反应,导致代码逻辑重复运行。
1、通过js控制按钮的disabled属性,如果双击速度快,也会重复提交。因此我们采用全局开关变量的方式来实现
1)除了客户端控制按钮的显示,服务端也要判断是否满足处理条件
2)点按钮提交到后台处理的程序,需要先给单据打上标记“正在处理”,提交到后台处理时,先判断标记的值,不为正在处理才正常提交
一次刷新,按钮只能点击一次
1)、通过进入对应方法的时候禁用按钮
2)、将标识存入缓存,完成之后再修改,每次进入按钮对应的方法都从缓存中取数校验是否正在运行
1.2 同一个提交界面,多个人同时操作,勾选了相同的数据进行处理
2、处理数据之前,先给数据打上标记,有标记的数据不再处理
1.3 同一个后台请求,既设置了定时运行,又可以通过手工提交运行。可能会运行相同的数据
2.处理数据之前,先给数据打上标记,有标记的数据不再处理
这里的处理方式类似1.2
eg:正在定时运行时不允许手工提交
通过限制单一触发点或者在处理时做唯一性校验再创建后续逻辑
从接口表生成正式表时需要有判断唯一性标识
在从对方系统接取数据的时候,需要对接口做重复性校验
▼
-END-
作者:贺享乐
审核:谭广源
编辑:朱思聪