如何设置树形基础资料的左树焦点原创
金蝶云社区-陈来珍
陈来珍
1人赞赏了该文章 901次浏览 未经作者许可,禁止转载编辑于2022年12月22日 16:39:56

关键词:树形基础资料、左树、焦点

一、需求

根据节点编码,在打开树形基础资料F7列表后,显示左树聚焦于编码对应的节点,并展开,同时右表只显示改节点下的数据

image.png

二、思路与方案

首先根据编码查到对应树形基础资料数据的id,并传参到树形基础资料列表插件,在列表插件的afterBindData中判断设置焦点信息,由于树形基础资料列表会触发两次afterBindData事件,一次是在走源表单列表kded_tree119的BillList的初始化,一次是对整个树形基础资料模板ListView的初始化,所以只要在最后一次的afterBindData事件中设置焦点即可。

三、实现过程

1、传递F7列表的参数

//单据插件
public class DemoJBillPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener {
    @Override
    public void registerListener(EventObject e) {
        BasedataEdit bd = this.getView().getControl("kded_basedatafield");
        bd.addBeforeF7SelectListener(this);
        super.registerListener(e);
    }

    @Override
    public void beforeF7Select(BeforeF7SelectEvent bf7) {
        String name = bf7.getProperty().getName();
        if (name.equals("kded_basedatafield")){
            Object number = this.getModel().getValue("kded_textfield");
            //根据父页面传过来的编码查询节点id
            DynamicObject queryObj = QueryServiceHelper.queryOne("kded_tree119", "id,number", new QFilter[]{new QFilter("number", QCP.equals, number)});
            if (queryObj==null){
                this.getView().showTipNotification("编码对应的节点不存在");
                bf7.setCancel(true);
                return;
            }
            ListShowParameter lsp = (ListShowParameter) bf7.getFormShowParameter();
            lsp.setCustomParam("nodeId",queryObj.getString("id"));
        }
    }
}

2、设置树形基础资料的左树焦点

/**
 * 树形基础资料列表插件
 */
public class SetTreeNodeFocuListPlugin extends StandardTreeListPlugin {

    @Override
    public void afterBindData(EventObject e) {
        super.afterBindData(e);
        //回走两次afterBindData事件,在最后一次再初始化
        if (e.getSource() instanceof ListView) {
            String nodeId = this.getView().getFormShowParameter().getCustomParam("nodeId");
             if (!StringUtil.isEmpty(nodeId)&&this.getTreeModel().getGroupProp() != null) {
                    TreeNode root = this.getTreeModel().getRoot();
                    TreeNode treeNode = root.getTreeNode(nodeId);
                    //设置当前节点
                    this.getTreeModel().setCurrentNodeId(nodeId);
                    //设置焦点
                    this.getTreeListView().getTreeView().focusNode(treeNode);
                    //设置是否展开节点
                    this.getTreeListView().getTreeView().showNode(nodeId);
                    //刷新设置的节点信息,这样才可以更新右表的数据
                    this.getTreeListView().refreshTreeNode(nodeId);
            }
        }
    }
}

四、效果图

先输入编码,再点击基础资料,弹出的树形基础资料列表如下效果

image.png五、开发环境版本

V5.0.012

六、参考资料

开发平台

学习成长中心

SDK接口

开发必备100个小知识

开发案例库


赞 1