本文介绍了在特定开发环境中,通过插件方式向页签控件添加可关闭的子页签的实现过程。首先,由于直接通过代码添加静态子页签存在无法关闭的问题,故采用插件和showForm方法实现。实现步骤包括设计页面、注册插件并编写代码实现打开子页签及关闭其他或全部页签的功能。此外,还讨论了开发环境版本、注意事项及参考资料,并提供了插件代码和元数据zip包作为附件。
关键词:页签
一、需求
页签控件添加子页签。
由于通过代码添加控件的方式比较复杂,而且添加的子页签属于静态页签,无法关闭,所以需要通过其他方式来添加子页签控件。
二、思路与方案
页签控件可以用showForm的方式也能实现打开子页签。
1.设计页面,调整页签控件的页签风格为“默认”。
2.注册插件,编写 打开子页签的插件代码。
3.在插件代码中实现关闭其他页签、关闭全部页签功能。
三、实现过程
1.设计页面
在设计器中添加页面,kdec_wrxtest_tab。
添加一个页签控件。
调整页签风格为“默认”。
我放置了3个按钮打开三个单据列表
2.实现打开子页签的功能。
添加插件
插件关键代码如下
在ShowParameter中设置展示方式为NewTabPage;设置展示目标控件标识。
listShowParameter.getOpenStyle().setShowType(ShowType.NewTabPage); listShowParameter.getOpenStyle().setTargetKey("kdec_tabap");
代码如下
@Override public void registerListener(EventObject e) { super.registerListener(e); addClickListeners("kdec_test", "kdec_open_tl", "kdec_open_mt", "kdec_open_st"); } @Override public void click(EventObject evt) { super.click(evt); if (evt.getSource() instanceof Button) { switch (((Button) evt.getSource()).getKey()) { case "kdec_open_tl": showParameter("kdec_textline_bill"); break; case "kdec_open_mt": showParameter("kdec_material"); break; case "kdec_open_st": showParameter("kdec_contexture"); break; } } } private void showParameter (String billKey) { ListShowParameter listShowParameter = new ListShowParameter(); // 单机列表模板标识(固定写法) listShowParameter.setFormId("bos_list"); listShowParameter.setBillFormId(billKey); listShowParameter.getOpenStyle().setShowType(ShowType.NewTabPage); //设置TargetKey,这里传入页签控件的标识 listShowParameter.getOpenStyle().setTargetKey("kdec_tabap"); IFormView view = getView(); view.showForm(listShowParameter); }
3.实现关闭其他页签、关闭全部页签功能
接上述第二点,如果点击“关闭其他页签”、“关闭全部页签”,会发现没有效果,并不会关闭。
我们需要在插件代码中实现:
@Override public void registerListener(EventObject e) { super.registerListener(e); Tab tab = getControl("kdec_tabap"); tab.addTabCloseListener(this); } @Override public void tabClose(TabCloseEvent tabCloseEvent) { List<String> tabKeys = tabCloseEvent.getTabKeys(); List<Map<String, String>> tabListClose = new ArrayList(10); Iterator var4 = tabKeys.iterator(); while(var4.hasNext()) { String tabKey = (String)var4.next(); IFormView formView = SessionManager.getCurrent().getViewNoPlugin(tabKey); formView.close(); HashMap<String, String> arg = new HashMap(); arg.put("pageId", tabKey); tabListClose.add(arg); } IClientViewProxy clientViewProxy = getView().getService(IClientViewProxy.class); clientViewProxy.addAction("closeWindow", tabListClose); }
四、效果图
调整为默认之后,会有2个效果,出现一个X,提供给用户进行关闭;右键点击,可以出现关闭页签。
五、开发环境版本
六、注意事项
1.除非必要,勿要在页签控件上添加固定的子页签,在关闭其他页签时,是没有办法关闭固定页签的。
如下图,我在页签控件上添加了2个静态的子页签,这两个子页签是无法关闭的,即常驻在页签控件上。
2.关于页签控件的一些使用方法,也可以参考首页默认插件的实现方式:
kd.bos.portal.plugin.BizAppHomePlugin
八、附件
附件说明:
插件代码:DemoTestControlTabPlugin.java
元数据zip包:kdec_wrx_test-kdec_wrx_col_app-20221220164527.zip
元数据说明
业务云编码:kdec_wrx_test;应用编码:kdec_wrx_col_app;页面:kdec_wrxtest_tab;
CreateTab.zip(8.96KB)
推荐阅读