基础资料F7精准搜索(禁用模糊查询)原创
金蝶云社区-技术支持与赋能部_ZH
技术支持与赋能部_ZH
4人赞赏了该文章 812次浏览 未经作者许可,禁止转载编辑于2022年11月08日 17:33:54

关键词:基础资料,搜索

一、需求

目前标准产品基础资料f7都是模糊查询。实际应用场景用户输入要搜索的内容,一下子带出很多不想要的数据出来。需要开发一个精准搜索的功能来应对这种场景,输入什么就查什么,不模糊查询。

二、思路与方案

2.1分析思路

难点是开发者事件的选择上可能会选择beforeF7Select事件来做过滤,但是实际上我们要拦截搜索框内容这个时候beforeF7Select已经执行完了,我们不需要过滤打开f7的页面。

2.2实现方案

确定插件绑定的表单:应该是基础资料列表插件

确定重写的事件:通过setFilter事件监听搜索框输入的内容

拦截输入的内容,进行过滤条件替换

三、实现过程

1、绑定基础资料列表插件

image.png

2、插件继承AbstractListPlugin,重写setFilter,获取过滤条件

image.png

image.png

通过getQFilters方法,知道搜索框的查询条件是 1 ftlike 'number,name#d'

3、掌握了规律,进行过滤条件的替换

        @Override
	public void setFilter(SetFilterEvent e) {
		// TODO Auto-generated method stub
		super.setFilter(e);
		//拿到过滤条件
		List<QFilter> qFilters = e.getQFilters();
		//遍历
		for(int x=0;x<qFilters.size();x++) {
			String filterstring = qFilters.get(x).toString();
			//判断是否来自搜索框过滤
			if(filterstring.contains("name")&&filterstring.contains("number")) {//搜索框查询
				//截取搜索框条件
				String[] split = filterstring.split("#");
				String substring = split[1].substring(0, split[1].length()-1);
				//删除标准过滤条件
				qFilters.remove(x);
				//增加自定义搜索
				qFilters.add(x, new QFilter("name","=",substring).or("number","=",substring));
				
			}
			
		}
	
	}

四、效果图

image.png

image.png

五、开发环境版本

V5.0.002

六、注意事项

1、遍历过滤条件时,注意执行remove后会改变qFilters集合,所以要即时在相对角标位置补充过滤条件否则会影响后续条件替换

七、参考资料

开发平台

学习成长中心

八、源代码

赞 4