Openedge SDO -> умный браузер данных - я хочу отфильтровать результаты запроса

У меня есть 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 по мере его создания, но я также с радостью отфильтрую данные по пути в умный браузер или в умный браузер.

2 ответа

Бизнес-проблема, которую вы пытаетесь решить, чревата проблемами с производительностью, если вы реализуете ее так, как написано. Я бы предложил

  1. добавление еще одного символьного столбца в таблицу или базу данных,
  2. положить все слова из других столбцов в нем,
  3. применение словарного индекса к новому столбцу,
  4. выполнить поиск по этому столбцу, а затем вернуться к исходным таблицам.

Это будет намного быстрее и проще в использовании.

Я использовал очень простое решение в конце. Пользователи могут ввести строку, которую они ищут. Если строка находится в ячейке браузера, эта ячейка выделяется желтым цветом.

Перед этим пользователям приходилось прокручивать вверх и вниз, пытаясь разглядеть интересующие клетки в сотнях строк. У нас не было ни времени, ни бюджета для чего-то более изумительного.

Важный фрагмент кода в умном браузере выглядит следующим образом...

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 ...

это не жестко, чтобы искать только Боба - но вы должны понять.

Другие вопросы по тегам