我有一个SDO,它为只读浏览器提供数据。SDO查询连接多个表,并具有计算字段和自然数据字段。
用户现在想要一个搜索工具,这样浏览器将只显示搜索词出现在任何文本字段中的行。
例如,他们希望看到所在的行
customer.name matches "*bob*" OR
customer.address1 matches "*bob*" OR
product.description matches "*bob*" OR
calc_field_1 matches "*bob*" OR
calc_field_2 matches "*bob*" OR ...
理想情况下,答案将在SDO输出创建时对其进行过滤,但我也很乐意在通往智能浏览器或智能浏览器的途中对数据进行过滤。
如果按照编写的方式实现,您试图解决的业务问题将充满性能问题。我建议
- 将另一个字符列添加到表或数据库
- 将其他列中的所有单词放入其中
- 将单词索引应用于所述新列
- 对该列进行搜索,然后链接回源表
它会更快更容易使用。
我最后使用了一个非常简单的解决方案。用户可以输入他们要查找的字符串。如果字符串位于浏览器中的某个单元格中,则该单元格将以黄色高亮显示。
在此之前,用户必须上下滚动,试图在数百行中找到感兴趣的单元格。我们没有时间或预算做任何更花哨的事情。
智能浏览器中的重要代码如下。。。
on row-display of br_table in frame f-main
do:
if rowObject.field1 matches "*BOB*" then
rowObject.field1:BGCOLOR in browse br_table = 14.
if rowObject.field2 matches "*BOB*" then
rowObject.field2:BGCOLOR in browse br_table = 14.
if rowObject.field3 matches "*BOB*" then
rowObject.field3:BGCOLOR in browse br_table = 14.
... etc ...
只寻找Bob并不难,但你应该明白这个想法。