如何实现F7列表列字段的动态显示原创
4人赞赏了该文章
1,369次浏览
编辑于2022年10月19日 15:47:40
关键词:F7列表、动态列
一、需求
采购订单(kded_oderbill)中,如果采购组织不为空,则弹出基础资料资料F7列表中,动态显示基础资料的批次和申请日期这两个字段
二、思路与方案
在基础资料选择前beforeF7Select事件中,判断条件是否成立,条件成立时,获取弹窗的FormShowParameter参数传递要添加的列的字段名给F7列表。然后再在基础资料的列表插件中判断传过来的参数,在beforeCreateListColumns事件中动态设置要添加的列。
三、实现过程
1、单据插件中,打开基础资料F7列表前,传递参数
public class AddF7FieldPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener{ @Override public void registerListener(EventObject e) { BasedataEdit bedit = this.getView().getControl("kded_basedatafield"); bedit.addBeforeF7SelectListener(this); super.registerListener(e); } @Override public void beforeF7Select(BeforeF7SelectEvent arg0) { if (arg0.getProperty().getName().equals("kded_basedatafield")&&this.getModel().getValue("kded_orgfield")!=null) { FormShowParameter fsp = arg0.getFormShowParameter(); Map<String, Object> addFields = new HashMap<>(); ArrayList<String> fields = new ArrayList<String>(); fields.add("kded_textfield"); fields.add("kded_datefield"); addFields.put("addFields", fields); fsp.setCustomParams(addFields); } } }
2、基础资料列表插件中,动态添加列
public class AddFieldListPlugin extends AbstractListPlugin { @Override public void beforeCreateListColumns(BeforeCreateListColumnsArgs args) { Map<String, Object> addFields = this.getView().getFormShowParameter().getCustomParams(); JSONArray fields = (JSONArray) addFields.get("addFields"); if (fields == null) { return; } for (int i = 0; i < fields.size(); i++) { String field = fields.get(i).toString(); if (field.equals("kded_textfield")) { ListColumn colText1 = this.createListColumn(field, "批次"); args.addListColumn(colText1); } else if (field.equals("kded_datefield")) { ListColumn colText1 = this.createListColumn(field, "申请日期"); args.addListColumn(colText1); } } super.beforeCreateListColumns(args); } /** * 创建列对象返回 * * @param key * 列标识,需要显示的字段,如"textfield"、 "basedatafield.name", * 即实体中存在的字段标识。 * @param caption * 列标题 * @return */ private ListColumn createListColumn(String key, String caption) { ListColumn col = new ListColumn(); col.setCaption(new LocaleString(caption)); col.setKey(key); col.setListFieldKey(key); return col; } }
四、效果图
五、开发环境版本
V5.0.002
六、参考资料
如何实现F7列表列字段的动态显示.zip(27.48KB)
赞 4
4人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读