29、列表插件,物料列表,多字段,模糊查询,PrepareFilterParameter原创
16人赞赏了该文章
6,845次浏览
编辑于2020年07月09日 10:46:46
摘要由AI智能服务提供
文本介绍了处理物料信息数量庞大时,通过增加模糊查询字段以提高搜索效率与准确度的方案。在物料数据库上增加了一个文本字段用于模糊查询,并通过编写插件来拦截和修改过滤条件,使用户输入的搜索值能在名称和规格型号两个字段中同时进行模糊匹配,从而提升搜索效果。具体实现包括在VS中编写类库、BOS中扩展物料字段、修改快捷查询面板、编写物料列表插件并启用,以实现输入如“轴承 R12”时,能精确匹配到包含这些关键词的数据。
案例背景:
物料信息很多,已经上百万条。 现在遇到的问题是在输入“轴承”查询出来可能就会有几百条记录。 因此,需要通过输入 “轴承 R12”,然后在名称与规格型号中,同时进行模糊匹配,匹配出名称包含“轴承” ,且规格型号包含 “R12”的所有数据,提升搜索的效率、准确度。
实现方案:
在物料上,增加了一个专门处理模糊查询的文本字段,默认以此字段作为快捷过滤字段,并拦截列表过滤事件,在后台修改过滤条件,使用户录入的搜索值,在多个字段间进行匹配。
1、打开VS,新建一个类库,具体可以参考21.1 ,1-4步
1.1、和第24节一样,使用PrepareFilterParameter方法
1.2、复制参考里面代码,到第24节代码
2、打开BOS,扩展物料,增加一个文本字段,命名为“名称规格查询”,F_YDIE_Text
3、保存单据设计;之后重新打开物料扩展,以刷新物料的快捷面板可选择字段
4、修改物料的快捷查询面板,把文本字段,摆在首选位置:
5、编写物料列表插件,对模糊查询文本字段的过滤条件进行重新解析,拼接出类似于:
(名称 like '%轴承%' OR 规格型号 like '%轴承%') AND (名称 like '%R12%' OR 规格型号 like '%R12%')
F_YDIE_Text Like ‘%轴承 12%’ 1.‘%轴承 12%’ 2. 轴承 12 3. FName Like ‘%轴承%’ and FSpecification Like ‘%12%’
6、启用插件,实际运行效果:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Kingdee.BOS; using Kingdee.BOS.Core; using System.ComponentModel; using Kingdee.BOS.Core.List.PlugIn; using Kingdee.BOS.Core.List; namespace Kingdee.Bos.ListMy { [Description(" 物料模糊查询")] [Kingdee.BOS.Util.HotUpdate] public class ClassName:AbstractListPlugIn { //过滤条件 public override void PrepareFilterParameter(BOS.Core.List.PlugIn.Args.FilterArgs e) { base.PrepareFilterParameter(e); // "( F_YDIE_Text Like '%轴承 R12%' )" string quickFilter = this.ListModel.FilterParameter.QuickFilterString; if(string.IsNullOrWhiteSpace(quickFilter)) {// 快捷条件为空白,无需处理 return; } if (quickFilter.IndexOf("F_YDIE_Text") <0) {// 快捷条件不含模糊查询字段, return; } // 去掉首尾的括号:从第2个字符开始截取,直到倒数第2个字符 quickFilter = quickFilter.Substring(1, quickFilter.Length - 2); // 把过滤条件中的and,替换为大写 string[] splits = { "AND" }; string[] oldFilters = quickFilter.Split(splits, StringSplitOptions.None); List<string> newFilters = new List<string>(); foreach(string oldFilter in oldFilters) { if(oldFilter.IndexOf("F_YDIE_Text")<0) {// 此段条件中,未包含模糊查询字段,略过 newFilters.Add(oldFilter); } else { // 截取条件值 int startIndex = oldFilter.IndexOf("'"); int endIndex = oldFilter.IndexOf("'", startIndex + 1); string filterValue = oldFilter.Substring(startIndex + 1, endIndex - startIndex - 1); // 按照空格对条件值进行分解 string[] fldValues = filterValue.Split(' '); // 重新拼接条件 List<string> fldFilters = new List<string>(); foreach(string fldValue in fldValues) { if(string.IsNullOrWhiteSpace(fldValue)) { continue; } // 去掉两头空格 string fldValueNoSpace = fldValue.Trim(); // 拼接新条件:名称 like '%value%' or 规格 like '%value%' string fldFilter = string.Format("(Fname like '%{0}%' OR FSpecification like '%{0}%')", fldValueNoSpace); fldFilters.Add(fldFilter); } string newFilter = string.Join(" AND ", fldFilters); newFilters.Add(newFilter); } } // 重新填写快捷过滤条件 this.ListModel.FilterParameter.QuickFilterString = "(" + string.Join(" AND ", newFilters) + ")"; } } }
总目录链接
https://vip.kingdee.com/article/64993872014591232
29.zip(35.10KB)
赞 16
16人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读