`
忘忧鸟
  • 浏览: 141784 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

F7控件设置过滤条件

    博客分类:
  • BOS
阅读更多

在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控件调用还是基础资料List
	super.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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics