F7过滤
金蝶云社区-月老玩红线
月老玩红线
15人赞赏了该文章 1,671次浏览 未经作者许可,禁止转载编辑于2021年04月23日 16:12:18

1.普通基本资料,或者业务单据表头的F7控件设置过滤的方法:

  在EditUI.java类的onload方法中加入如下代码:

EntityViewInfo entity = new EntityViewInfo(); 

FilterInfo filter = new FilterInfo();  

//设置过滤条件  

filter .getFilterItems().add(new FilterItemInfo(“过滤条件字段”,值,CompareType.EQUALS)); 

entity .setFilter(filter);  

//F7控件设置实体视图信息

prmtF7.setEntityViewInfo(entity); 

2.分录中的F7设置过滤条件

大家知道,分录中的F7控件我们没办法直接获得控件对象。所以要在EditUI.java中的onload方法中通过,

以单头库存组织过滤分录仓库字段为例子

       protected com.kingdee.bos.ctrl.extendcontrols.KDBizPromptBox prmwarehouse;   //定义一个全局控件

prmtstorageOrgUnit.addDataChangeListener(new DataChangeListener (){

            public void dataChanged(DataChangeEvent datachangeevent) {

Object OrgUnit = prmtstorageOrgUnit.getValue();

if(OrgUnit!=null){

StorageOrgUnitInfo Info =(StorageOrgUnitInfo)OrgUnit;

EntityViewInfo entity = new EntityViewInfo();

FilterInfo filter  = new FilterInfo();

filter.getFilterItems().add(new FilterItemInfo("whState","1",CompareType.EQUALS));

filter.getFilterItems().add(new FilterItemInfo("storageOrg.id",Info.getId(),CompareType.EQUALS));

entity.setFilter(filter);

prmwarehouse = (KDBizPromptBox)(kdtEntry.getColumn("warehouse").getEditor().getComponent());

prmwarehouse.setEntityViewInfo(entity);

}

}

}); 

  

3.左树右表结构中表头的F7控件(调用的是基础资料的ListUI对象):

  假设现在有一个左树又表的基础资料的表头有一个F7控件,这个控件引用了一个名字为BaseListUI.ui的基础资料,这个被引用的基础资料对应了两个JAVA类,名为BaseListUI.java和BaseEditUI.java。找到这两个类,我们接下来实现过滤:

  第一步:BaseListUI.java覆盖父类的setF7Use(true,ctx)方法,这个方法有两个参数,一个是boolean,一个是Map。代码如下: //    声明一个boolean类型的全局变量

    boolean isF7ListUI = false;  

//    覆盖方法setF7Use(true,ctx) 

     public void setF7Use(boolean isF7Use,Map ctx){ 

         isF7ListUI = true; 

         supper.setF7Use(isF7Use,ctx);  

    }  

//    覆盖getDefaultEntityViewInfo()方法

 protected EntityViewInfo getDefaultEntityViewInfo(){  

 if(isF7ListUI){ 

  EntityViewInfo entity = new EntityViewInfo(); 

  FilterInfo filter = new FilterInfo(); 

  filter.getFilterItems().add(new FilterItemInfo("过滤条件字段",  值, CompareType.EQUALS)); 

  entity.setFilter(filter); 

 return entity; 

  }else{ 

return super.getDefaultEntityViewInfo(); 

}  

4、SQL语句过滤

    /**

  * 过滤仓库

  */

 void addFilterOfWareHouse() {

  EntityViewInfo warehouseView = new EntityViewInfo();

  FilterInfo warehouseFilter = new FilterInfo();

  Object obj = prmtstorageOrgUnit.getValue();

  String orgID = null;

  String sql = null;

  if (obj != null) {

   orgID = ((StorageOrgUnitInfo) obj).getId().toString();

   sql = "select FID from T_DB_WAREHOUSE where FID in( select FWarehouseID from T_DB_SOAccreditWH where FstorageOrgID='" + orgID + "')";

   warehouseFilter.getFilterItems().add(new FilterItemInfo("id", sql, CompareType.INNER));

  }

  warehouseFilter.getFilterItems().add(new FilterItemInfo("whState", "1"));

  warehouseView.setFilter(warehouseFilter);

  prmtwareHouse.setEntityViewInfo(warehouseView);

 }

5、合并过滤条件

filter.setMaskString("(#0 or #1) and #2 ");

6、F7重置(解决第2次过滤可以,第一次不行的问题)

    prmtpm.setEntityViewInfo(view); 

  //放于setEntityViewInfo之后,参考TargetAchievementAccruePolicyEditUI.java

    prmtpm.getQueryAgent().resetRuntimeEntityView();


本文转载自:1

作者:1

原文链接:1

赞 15