网络互斥开发

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:2

网络互斥开发

1 业务背景

某个业务场景,需要对某个业务表单数据进行锁定,使其他用户对该数据不可编辑

2 思路

可以通过网络互斥插件进行干预

kd.bos.mutex.DataMutex#batchrequire  批量申请锁

kd.bos.mutex.DataMutex#batchRelease 批量释放锁


3 案例环境准备

模拟创建一个业务表单,添加两个按钮(加锁,解锁)


4 实例代码(对人员(bos_user)数据进行锁定)

1、加锁

   public void itemClick(ItemClickEvent evt) {
    super.itemClick(evt);
    String itemKey = evt.getItemKey();
    if(itemKey.equals("lago_baritemap")){
        //加锁
        try (DataMutex dataMutex = DataMutex.create()) {
            //如果需要和标准操作(如保存、提交、审核...)互斥,则可使用default_netctrl(默认分组),不需要和标准操作互斥则需要用自定义的groupId
            String groupId = "default_netctrl";
            String entityKey = "bos_user";
            List mutexRequireList = new ArrayList<>(1);

            Map requireParam = new HashMap<>();
            requireParam.put(DataMutex.PARAMNAME_DATAOBJID, "1833438011606433792");//数据id
            requireParam.put(DataMutex.PARAMNAME_GROUPID, groupId);
            requireParam.put(DataMutex.PARAMNAME_ENTITYKEY, entityKey);
            requireParam.put(DataMutex.PARAMNAME_OPERATIONKEY, "modify");
            requireParam.put(DataMutex.PARAMNAME_ISSTRICT, true);
            //建议设置自定义标识,用于后续区分标准操作和自定义申请的网控
            requireParam.put(DataMutex.PARAMNAME_DATA_CALL_SOURCE, "test");
            mutexRequireList.add(requireParam);
            Map mutexResult = dataMutex.batchrequire(mutexRequireList);
            Set set = mutexResult.entrySet();
            Iterator it = set.iterator();
            while(it.hasNext()){
                Map.Entry next = (Map.Entry) it.next();
                String key = (String) next.getKey();
                Boolean value = (Boolean) next.getValue();

                if (value) {
                    //申请互斥成功的
                } else {
                    Map lockInfo = dataMutex.getLockInfo(key, groupId, entityKey);
                    if (lockInfo != null) {
                        //申请锁失败,提示已经存在的锁信息
                    }
                }

            }

        } catch (Exception e) {
            Log.error(e);
        }
    }
}

2、解锁

public void itemClick(ItemClickEvent evt) {
    super.itemClick(evt);
    String itemKey = evt.getItemKey();
     if (itemKey.equals("lago_baritemap2")) {
        //释放锁
        try (DataMutex dataMutex = DataMutex.create()) {
            String groupId = "default_netctrl";
            String entityKey = "bos_user";
            List mutexRequireList = new ArrayList<>(1);
            Map requireParam = new HashMap<>();

            requireParam.put(DataMutex.PARAMNAME_DATAOBJID, "1833438011606433792");
            requireParam.put(DataMutex.PARAMNAME_GROUPID, groupId);
            requireParam.put(DataMutex.PARAMNAME_ENTITYKEY, entityKey);
            requireParam.put(DataMutex.PARAMNAME_OPERATIONKEY, "modify");
            mutexRequireList.add(requireParam);

            Map mutexResult = dataMutex.batchRelease(mutexRequireList);
            Set set = mutexResult.entrySet();
            Iterator it = set.iterator();
            while(it.hasNext()){
                Map.Entry next = (Map.Entry) it.next();
                String key = (String) next.getKey();
                Boolean value = (Boolean) next.getValue();

                if (value) {
                    //申请互斥成功的
                } else {
                    Map lockInfo = dataMutex.getLockInfo(key, groupId, entityKey);
                    if (lockInfo != null) {
                        //申请锁失败,提示已经存在的锁信息
                    }
                }

            }

        } catch (Exception e) {
            Log.error(e);
        }




    }


}


5 效果图





6 源代码

源码 .zip












网络互斥开发

1 业务背景某个业务场景,需要对某个业务表单数据进行锁定,使其他用户对该数据不可编辑2 思路可以通过网络互斥插件进行干预kd.bos.mutex...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息