F7控件设置过滤条件
在bos开发中要对f7控件进行甚至过滤条件,有以下几种情况:表头F7控件、分录F7控件(界面纯表格)、分录F7控件(调用基础资料LISTUI,左树右表)
?
?1.表头F7控件
EntityViewInfo entityViewInfo = new EntityViewInfo();FilterInfo filterInfo = new FilterInfo(); // 建立过滤条件filterInfo.getFilterItems().add(new FilterItemInfo("deletedStatus", 1, CompareType.GREATER_EQUALS));entityViewInfo.setFilter(filterInfo);prmtF7.setEntityViewInfo(entityViewInfo);?
2.?分录F7控件(界面纯表格)
? ? 与表头F7控件差不多,先获取单元格编辑控件,再进行相应的设置
Object obj = kdtEntrys.getColumn("supplier").getEditor().getComponent();if(obj instanceof KDBizPromptBox){KDBizPromptBox prmtF7 = (KDBizPromptBox)obj;EntityViewInfo entityViewInfo = new EntityViewInfo();FilterInfo filterInfo = new FilterInfo();filterInfo.getFilterItems().add(new FilterItemInfo("deletedStatus",1, CompareType.EQUALS));entityViewInfo.setFilter(filterInfo);
prmtF7.setEntityViewInfo(entityViewInfo);
}??3.分录F7控件(调用基础资料LISTUI,左树右表)
? ?这种情况比较复杂,先查看抽象类生产的代码:
kdtEntrys_supplier_PromptBox.addSelectorListener(new SelectorListener() {com.kingdee.eas.ors.basedata.master.client.ViewPointListUI kdtEntrys_supplier_PromptBox_F7ListUI = null;public void willShow(SelectorEvent e) {if (kdtEntrys_supplier_PromptBox_F7ListUI == null) {try {kdtEntrys_supplier_PromptBox_F7ListUI = new com.kingdee.eas.ors.basedata.master.client.ViewPointListUI();} catch (Exception e1) {e1.printStackTrace();}HashMap ctx = new HashMap();ctx.put("bizUIOwner",javax.swing.SwingUtilities.getWindowAncestor(kdtEntrys_supplier_PromptBox_F7ListUI));kdtEntrys_supplier_PromptBox_F7ListUI.setF7Use(true,ctx);kdtEntrys_supplier_PromptBox.setSelector(kdtEntrys_supplier_PromptBox_F7ListUI);}}});?查看代码发现,左树右表基础资料调用的是基础资料ListUI界面,
kdtEntrys_supplier_PromptBox_F7ListUI.setF7Use(true,ctx);
ctx为Map类型,可以传递各种类型数据,其中可以把过滤条件加入此处,通过查阅?setF7Use方法代码有如下代码:
f7Delegate = new com.kingdee.eas.framework.client.F7Render(this, ctx);
通过反编译可以看到F7Render类为封装类,代码如下:
public void init() throws Exception { if(ctx != null) { isF7Use = true; f7Filter = (EntityViewInfo)ctx.get("EntityViewInfo"); if(ctx.get("HasCUDefaultFilter") != null) ……? 弄清原由了,可以进行相应的设置.
?
根据业务需求,在F7控件调用时过滤的已禁用的基础资料,而在基础资料列表中又需全部显示以便维护?
经上分析,可以清楚F7控件过滤条件传递过程,现在用另外一方式实现:
假设:基础资料为BaseListUI.ui--->BaseListUI.java BaseEditUI.java
第一步:基础资料BaseListUI.java覆盖抽象类AbstractBaseListUI.java中的setF7Use(true,ctx)方法:
public void setF7Use(boolean isF7Use, HashMap ctx) {isF7ListUI = true;//标记是F7控件调用还是基础资料Listsuper.setF7Use(isF7Use, ctx);}?第二步:过滤ListUI数据,覆盖getDefaultEntityViewInfo()方法:
protected EntityViewInfo getDefaultEntityViewInfo() {if(isF7ListUI){EntityViewInfo ewinfo = new EntityViewInfo();FilterInfo vwFilter = new FilterInfo();vwFilter.getFilterItems().add(new FilterItemInfo("deletedStatus",1, CompareType.EQUALS));ewinfo.setFilter(vwFilter);return ewinfo;}else{return super.getDefaultEntityViewInfo();}}?
顺利完成!
通过debug分析,执行类顺序:?setF7Use-->getDefaultEntityViewInfo-->onload