首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

F7控件设立过滤条件

2012-09-19 
F7控件设置过滤条件在bos开发中要对f7控件进行甚至过滤条件,有以下几种情况:表头F7控件、分录F7控件(界面纯

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

热点排行