|
|
|
Создание конструктора фильтров
|
|||
|---|---|---|---|
|
#18+
Есть идея дать пользователю возможность создавать свои фильтры по некоторым вычисляемым параметрам. Как в почтовой программе: "если отправитель письма такой-то и тема содержит вот это, то положить письмо в такую-то папку." Прикинул - у меня получилось 12 таблиц для описания конструктора фильтров. И возник вопрос - как лучше обрабатывать логику, которую накликал пользователь: Генерить финальный SQL на клиенте или на сервере процедурой, и подставлять-ли в него уже вычисленные значения или ставить имена полей таблиц? Если подставлять вычисленные - то прийдется генерить запрос каждый раз перед выполнением, а если подставлять поля - то уже можно создать хранимые процедуры. Но для генерации процедур у пользователя может не быть прав, а значит нужен некий джоб-помошник, который перегенерирует процедуры каждый раз, когда пользователь меняет логику фильтра. Может есть у кого примеры реализаций, чтобы понять хоть в правильном ли направлении двигаюсь. --- Пишу в теме Оракла потому, что фильтр будет работать с этой базой, а особенности языка, как показывает практика, сильно влияют на способ реализации. То же самое по логике работы - на MSSQL по коду может сильно отличаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2017, 11:22 |
|
||
|
Создание конструктора фильтров
|
|||
|---|---|---|---|
|
#18+
ART-CODEдать пользователю возможность создавать свои фильтрыДай пользователю возможность писать sql. Почему-то все продукты издеваются над эргономикой, заставляя делать пользователя сотни кликов и драг-дропов в запутанных диалогах. В итоге приходится вместо простого текстового окна прикладывать неимоверные усилия и тратить время на множество экспериментов, чтобы разобраться, как получить тот или иной результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2017, 12:07 |
|
||
|
Создание конструктора фильтров
|
|||
|---|---|---|---|
|
#18+
-2-, Обеими руками "за", если бы не уголовная ответстенность в случае, если в результате такого решения "что-то пойдет не так". Все слишком серьезно в этот раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2017, 12:22 |
|
||
|
Создание конструктора фильтров
|
|||
|---|---|---|---|
|
#18+
ART-CODE, ART-CODEЕсли подставлять вычисленные - то прийдется генерить запрос каждый раз перед выполнением, Опасаешься огромных расходов на хард парс? В большинстве случаев, подобные штуковины генерируют динамические запросы печального вида. Взять тот же Oracle BI Когда пользователь открывает отчет, сервер презентаций (Presentation Server) генерирует запрос на языке Logical SQL к серверу BI. Сервер BI разбирает запрос, и переводит его в запросы к источникам данных на их «родных» языках — sql, mdx и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2017, 13:53 |
|
||
|
Создание конструктора фильтров
|
|||
|---|---|---|---|
|
#18+
Так, продолжаю размышлять вслух (уж извините что отвлекаю). Скорее всего, генерить SQL на клиенте не правильно: 1 - так теряется возможность использовать настроенные пользователем фильтры в джобах. (когда клиент получает результат автоматических проверок по своим фильтрам - например, по почте.) 2 - вопрос безопасности: доверия тому, что прилетело для выполнения в сервер от клиента - все-таки меньше, чем тому, что сгенерирует сервер по заранее известным правилам. С другой стороны - городить отдельный вспомогательный джоб для генерации хранимок тоже не очень хочется. Todo: уточнить хватит ли прав у пользователей для выполнения динамического SQL. --- env, Нет, вряд-ли будут огромные расходы на "парс", все-же задача в моем случае просто проверить пару десятков уже готовых значений - на соответствие некоторым допустимым диапазонам. Это не таблицы сканировать, а простое сравнение на больше/меньше/between/ и тому подобное. Скорее, опасаюсь проблем с безопасностью при использовании генрации SQL. Могут завернуть динамический код безопасники. И это еще не самый худший вариант. Хуже - если решение пройдет "в бой", а потом возникут проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 00:06 |
|
||
|
Создание конструктора фильтров
|
|||
|---|---|---|---|
|
#18+
ART-CODE, Как вариант для размышлений - идти по готовому пути систем отчётности. Т.е. иметь некие преднастроенные датасеты с параметрами и обработкой "пусто"/"все", всё что в этом случае может пользователь - сохранить готовый набор параметров для фиксированного запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 08:56 |
|
||
|
Создание конструктора фильтров
|
|||
|---|---|---|---|
|
#18+
ART-CODE-2-ART-CODEдать пользователю возможность создавать свои фильтрыДай пользователю возможность писать sql. Почему-то все продукты издеваются над эргономикой, заставляя делать пользователя сотни кликов и драг-дропов в запутанных диалогах. В итоге приходится вместо простого текстового окна прикладывать неимоверные усилия и тратить время на множество экспериментов, чтобы разобраться, как получить тот или иной результат. -2-, Обеими руками "за", если бы не уголовная ответстенность в случае, если в результате такого решения "что-то пойдет не так". Все слишком серьезно в этот раз. Полагаю, следует разработать собственный диалект SQL, который, ко всему, на этот раз, наконец-то окажется действительно дружественен для клерков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 09:15 |
|
||
|
Создание конструктора фильтров
|
|||
|---|---|---|---|
|
#18+
ВЫБРАЬ ИЗсобственный диалект SQL, DSL тоже вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 09:21 |
|
||
|
Создание конструктора фильтров
|
|||
|---|---|---|---|
|
#18+
О, идея! Не надо мне генерить ни SQL, ни хранимки Достаточно написать одну хранимку, которая работает с одним контролируемым параметром и умеет делать для него абсолютно все виды проверок - при этом - ветвлением через IF переходим на нужную в этот раз проверку, а затем продолжаем в цикле вызов хранимки для другого контролируемого параметра или выходим, если получили "стоп" - результат. Создать только группы элементарных взаимосвязанных проверок с условиями переходов и остановок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 11:12 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39501142&tid=1885476]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
620ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 282ms |
| total: | 967ms |

| 0 / 0 |
