单据列表打开时过滤控件设置默认收起原创
金蝶云社区-丁梦洋
丁梦洋
5人赞赏了该文章 477次浏览 未经作者许可,禁止转载编辑于2023年12月22日 10:25:26

最近接到个需求,打开单据列表时过滤条件默认收起,即下图所示

image.png

而不是默认的展开,见下图

image.png

在元数据过滤控件那配置【默认折叠】为开,无效!

写列表插件,如下,也无效!!

FilterContainer container = this.getView().getControl("filtercontainerap");
container.setCollapse(true);
container.setDefCollapse(true);
container.setCollapseable(true);

最后比较了下收起过滤和展开过滤两种情况下,打开单据列表接口返回值的差异,发现了盲点!!!

Image_20231220100607.png

跟踪源码跟到了赋值这个setting的代码kd.bos.mvc.FormConfigFactory#getSetting(kd.bos.form.FormShowParameter)

image.png

这样就简单了,只需在打开单据列表前,把这个setting里的fold设置为true就行了,所以逻辑写在了首页表单插件里,点应用就会触发。

private static final String LISTSETTING = ".ListSetting";
@Override
public void afterCreateNewData(EventObject e) {
    super.afterCreateNewData(e);
    //查出应用所有菜单绑定的跳转单据
    List<AppMenuInfo> menuInfoList = AppMetadataCache.getAppMenusInfoByAppId(this.getView().getFormShowParameter().getAppId());
    Set<String> entities = menuInfoList.stream().map(AppMenuInfo::getFormId).collect(Collectors.toSet());
    Map<String, Object> map = new HashMap<>();
    Map<String, Object> foldMap = new HashMap<>();
    foldMap.put("fold",true);//true为收起,false为展开
    for (String entity : entities){
        map.clear();
        String setting = UserConfigServiceHelper.getSetting(Long.parseLong(RequestContext.get().getUserId()),entity+LISTSETTING);
        if (StringUtils.isNotBlank(setting)){
            map = (Map) SerializationUtils.fromJsonString(setting, Map.class);
        }
        map.put("filtercontainerap",foldMap);
        UserConfigServiceHelper.setSetting(Long.parseLong(RequestContext.get().getUserId()),entity+LISTSETTING,SerializationUtils.toJsonString(map));
    }
}


赞 5