创建以行政组织为左树的左树右表结构树形基础资料原创
金蝶云社区-技术支持与赋能部_ZH
技术支持与赋能部_ZH
6人赞赏了该文章 1,109次浏览 未经作者许可,禁止转载编辑于2023年04月24日 17:00:51
summary-icon摘要由AI智能服务提供

本文介绍了如何在一个系统中实现以行政组织为左树的左树右表结构。由于行政组织的上下级结构特殊,传统方式无法直接应用,因此提出了一个新的实现方案:首先创建一个新的树形基础资料,然后将行政组织的上下级结构导入这个新树形资料中,最后将分组基础资料绑定到这个新创建的树形资料上。实现过程中,通过编写插件来执行数据导入逻辑,并更新视图以展示结果。此外,还提供了注意事项和参考资料。

关键词:左树右表,行政组织,树形基础资料

一、需求

需要创建以行政组织为左树的左树右表结构树形基础资料

二、思路与方案

2.1分析思路

左树右表结构一般是通过树形基础资料+分组基础资料组合创建。但是行政组织是特殊的树形基础资料,他的上下级结构是放在分录中的。以传统的方式创建会发现最终的左树右表结构的左树是平级无法带出上下级

image.png

image.png

2.2实现方案

我们可以自己创建一个普通的树形基础资料,将行政组织的上下级结构导入进新树形基础资料,然后分组基础资料绑定新的树形基础资料即可

三、实现过程

1、创建新的树形基础资料实体,并注册列表插件

2、在列表中添加自定义按钮“导入行政组织”,这个是用来引入行政组织数据的

image.png

3、编写插件,在itemclick事件中写入导入逻辑

@Override
public void itemClick(ItemClickEvent evt) {
    super.itemClick(evt);
    String itemKey = evt.getItemKey();
    if(itemKey.equals("按钮标识")){
        //只查行政组织状态为已审核且启用的数据,可以根据实际应用场景自定义过滤条件
        QFilter[] qFilters = new QFilter[]{new QFilter("structure.viewstatus", QCP.equals, "C"), new QFilter("structure.viewenable", QCP.equals, "1")};
        //查,按层级排序
        DataSet rows = QueryServiceHelper.queryDataSet("bos_adminorg", "bos_adminorg", "id,number,name,structure.level,structure.viewparent,structure.isleaf", qFilters, "structure.level asc");
        Iterator<Row> iterator = rows.iterator();
//遍历行政组织
        while(iterator.hasNext()){
            Row next = iterator.next();
            Long id = (Long) next.get("id");
             
            QFilter[] qFilters2 = new QFilter[]{new QFilter("id", QCP.equals, id)};
            DynamicObject xzzztree = BusinessDataServiceHelper.loadSingle("新树形基础资料标识", "id,number,name,level", qFilters2);
           //防止重复创建
            if(xzzztree==null){
                Object number = next.get("number");
                Object name = next.get("name");
                Object level = next.get("structure.level");
                Long viewparent = (Long) next.get("structure.viewparent");
                Object isleaf = next.get("structure.isleaf");
                //获取父级对象组织
                QFilter[] qFilters3 = new QFilter[]{new QFilter("id", QCP.equals, viewparent)};
                DynamicObject parent = BusinessDataServiceHelper.loadSingle("新树形基础资料标识", "id,number,name,level", qFilters3);
               //创建新的组织
                DynamicObject newDynamicObject = BusinessDataServiceHelper.newDynamicObject("新树形基础资料标识");
                newDynamicObject.set("id", id);
                newDynamicObject.set("parent", parent);
                newDynamicObject.set("number", number);
                newDynamicObject.set("name",name);
                newDynamicObject.set("level", level);
                newDynamicObject.set("status", "C");
                newDynamicObject.set("enable", 1);
                newDynamicObject.set("isleaf", isleaf);

                OperationResult saveOperate = SaveServiceHelper.saveOperate("新树形基础资料标识", new DynamicObject[]{newDynamicObject}, OperateOption.create());
            }
        }

    }
    //最后更新一下页面将数据展示出来
    this.getView().updateView();
}

4、将分组基础资料中的分组,绑定新创建的树形基础资料。

image.png

四、效果图


image.png

五、开发环境版本

V5.0.011

六、注意事项

1、行政组织导入一次成功后,如果右表已经有了数据,建议把导入功能禁用掉。防止再次导入使数据错乱。

2、本篇案例只提供了一次性导入更新行政组织结构的方案,持续更新方案可以人工维护也可以通过插件同步,插件同步只需要判断两边行政组织差量进行动态维护即可

七、参考资料

开发平台

学习成长中心

八、源代码



赞 6