如何实现分组基础资料左树节点的互斥功能原创
金蝶云社区-陈来珍
陈来珍
1人赞赏了该文章 688次浏览 未经作者许可,禁止转载编辑于2022年12月19日 09:14:00

关键词:分组基础资料、左树节点、网络互斥

一、需求

a用户选择某个节点进行编辑时,不允许b用户对该节点进行编辑;a用户选择某个节点进行新增时,b用户可以对该节点进行编辑。

image.png

二、思路与方案

分组基础资料中,左节点其实是另外一个基础资料(kded_groupbdclz)的数据,网络互斥是实际上是互斥分组的数据。

点击左树控件的新增或者编辑按钮时,分别为该节点申请网络互斥资源,当其他用户进行同样的操作时,申请互斥锁失败。image.png

三、实现过程

1、给基础资料kded_groupbdclz新增两个空操作

image.png

2、添加互斥锁,a用户点击左树节点进行新增或者编辑前,申请节点基础资料的互斥锁

public class MuteLockListPlugin extends StandardTreeListPlugin {
    @Override
    public void registerListener(EventObject e) {
        Button btnnew = this.getView().getControl("btnnew");
        btnnew.addClickListener(this);
        Button btnedit = this.getView().getControl("btnedit");
        btnedit.addClickListener(this);
        super.registerListener(e);
    }

    @Override
    public void beforeClick(BeforeClickEvent evt) {
        Object source = evt.getSource();
        if (source instanceof Button){
            Button bt=(Button)source;
            String key = bt.getKey();
            ITreeModel treeModel = this.getTreeModel();
            GroupProp prop = this.getTreeModel().getGroupProp();
            String entityId = prop.getBaseEntityId();
            String currentNodeId = (String)treeModel.getCurrentNodeId();
            //获取网络互斥锁
            if (key.equals("btnnew")){
                boolean requLock = MutexHelper.require(entityId,currentNodeId,"btnnew",false,null);
                if (!requLock){
                    this.getView().showErrorNotification("该树节点正在被其他用户新增节点占用,请稍后再试");
                    evt.setCancel(true);
                }
            }else if(key.equals("btnedit")){
                boolean requLock = MutexHelper.require(entityId,currentNodeId,"btnedit",false,null);
                if (!requLock){
                    this.getView().showErrorNotification("该树节点正在被其他用户编辑占用,请稍后再试");
                    evt.setCancel(true);
                }
            }
        }
        super.beforeClick(evt);
    }
    }

3、点击11这个节点进行编辑后,只有a用户在分组资料退出时,才释放互斥锁

image.png

image.png

//分组资料插件
public class Groupbasebillplugin extends AbstractBillPlugIn {
    // 创建logger
    private final static Log logger = LogFactory.getLog(Groupbasebillplugin.class);
    //分组页面关闭时释放互斥锁
    @Override
    public void pageRelease(EventObject e) {
        BillShowParameter bsp = (BillShowParameter) this.getView().getFormShowParameter();
        String formId = bsp.getFormId();
        String operate = bsp.getCustomParam("operate");
        if (operate==null){
            return;
        }
        if (operate.equals("addnew")){
            String id = bsp.getCustomParam("id");
            boolean isRelease = MutexHelper.release(formId, "btnnew", id);
            logger.info("互斥锁释放状态"+String.valueOf(isRelease));
        }else if (operate.equals("edit")){
            Map<String, Object> parentInfo = bsp.getCustomParam("tree_curr_id");
            String id = (String) parentInfo.get("value");
            boolean isRelease = MutexHelper.release(formId, "btnedit", id);
            logger.info("互斥锁释放状态"+String.valueOf(isRelease));
        }
        super.pageRelease(e);
    }
}

四、效果图

b用户点击11节点进行编辑时,申请互斥锁失败,

image.png

系统管理中的网络互斥列表可以看到相关网络互斥信息

image.png

五、开发环境版本

V5.0.002

六、参考资料

开发平台

学习成长中心

SDK接口

开发必备100个小知识

开发案例库

网络互斥接口文档

赞 1