网络互斥解析,正确看待“xxx正在编辑该记录”笔记
在使用苍穹系统时,你是否总是遇到如下图所示的提示 :xxx正在编辑该记录,请稍后再试或…?
系统提示示例
出现该提示语的原因在于苍穹平台的“网络互斥”机制。如果你时常因为该提示而头痛,请随小编一起揭开“网络互斥”的真面目,正确应对它~
1 什么是网络互斥
在正常业务流程中,经常出现多个人员或功能对同一数据进行操作,这些行为可能会造成数据的混乱和不准确,因此需要提供互斥功能限制同时操作,网络互斥便就此产生了。
简而言之,网络互斥是采用分布锁提供禁止同时对数据进行修改或同时执行某个功能的能力。
2 网络互斥分类
从系统上,网络互斥可以细分出两种模式:
功能互斥:同一张单据,多个功能,不允许有两个用户同时执行互斥的功能,称为功能互斥,比如在单据在审核时,不允许编辑;
数据互斥:同一个单据,不允许有两个用户同时对数据进行操作,称为数据互斥,比如两个人同时打开某张单据,前一个人在前一刻修改后,后一个人不允许修改该单据。
以上两种模式,本质都是为了解决数据覆盖、混乱的问题,功能互斥是从操作按钮层面就阻断了覆盖情况的发生,而数据互斥是从数据层进行了控制。
3 如何开启或关闭网络互斥
通过上述对网络互斥的解析,我们可以了解到,只有在操作数据的时候才需要网络互斥。因此,网络互斥的开启和关闭也是区分操作的。
我们可以找到单据的【网络控制】属性,点击即可修改当前单据的哪些操作需要开启网络互斥(系统默认“修改、删除、提交、审核、反审核、撤销”等常见操作均开启网络互斥),如下图所示:
【网络控制】属性修改示例
4 自定义操作如何增加网络互斥
如果以上的标准操作不符合需求,需要添加自定义操作的网络互斥,则可通过以下步骤实现:
步骤一:在操作中添加一个自定义的操作,然后在【网络控制】中开启该操作的网络互斥;
步骤二:在操作执行过程中调用网络互斥,判断该数据是否有其他网络互斥,如果没有即可以正常操作,操作完成后还需要及时释放网络互斥。
5 网络互斥锁释放
不同操作对应的锁不同,释放的机制也会有所不同。这里我们需要特别注意的是修改操作,修改操作表示页面正在编辑,到用户退出编辑之前应一直占用锁,而像提交、审核等这类操作是很快的,操作完成之后立即释放锁,所以修改锁和其他锁的持有时间是不一样的。
6 网络互斥接口
那么,我们怎么自己调用网络互斥呢?网络互斥有很多接口,包含申请网络互斥锁、释放网络互斥锁、获取网络互斥锁信息等。
如果是自己调用的网络互斥接口申请锁,那么操作完成后也是需要自己调用网络互斥接口来释放该锁,否则会一直不释放,从而导致其他用户无法操作该数据。相关方法如下:
6.1 帮助类kd.bos.form.operate.MutexHelper
帮助类方法示例
6.2 接口类kd.bos.mutex.DataMutex
接口类方法示例
7 网络互斥问题处理
如果出现文章开头的提示,而实际上xxx又未在操作该数据,该如何处理才能操作这条数据呢?不要方,我们是有故障处理的,方法如下:
-
当网络互斥释放锁异常导致数据无法正常加锁时,系统对锁增加了过期时间,超过8个小时的锁系统会主动释放。
-
如果想要立马释放网络互斥锁,可在**【系统管理】→【网络互斥】**界面中,找到该数据对应的锁并删除,即可释放该数据的网络互斥锁。
释放网络互斥锁路径示例
-
如果网络互斥列表未找到该数据锁,可以到monitor查看这条数据对应的分布式锁是否已经释放。
-
如果以上都没问题,则需要根据实际情况具体分析操作过程,排查操作是否有问题。
8 划重点
-
网络互斥是采用分布锁提供禁止同时对数据进行修改或同时执行某个功能的能力。
-
网络互斥可分为功能互斥和数据互斥两种模式,本质都是为了解决数据覆盖、混乱的问题。功能互斥是从操作按钮层面就阻断了覆盖情况的发生,而数据互斥是从数据层进行了控制。
-
只有在操作数据的时候才需要网络互斥,因此,网络互斥的开启和关闭需要区分操作。
-
操作完成后,需及时释放网络互斥锁。