Как задать фильтр в представлении?

  • Автор темы AlexeyStaf
  • Дата начала
A

AlexeyStaf

#1
Добрый день!
Пользователю доступно N-е количество представлений (порядка 40-50), один документ может отображаться только в одном представлении или в нескольких. Например, открыв 1-е представление ему надо по какому-то дополнительному критерию отсеять записи в нем - задать фильтр: по дате, по имени вложения или по какому-то еще полю (критерий может задаваться по полю, которое в данном представлении не отображается). После перехода на другое представление фильтр сбрасывается, хотя если бы не сбрасывался то ошибка с поврежденным документом все равно осталась бы.
Сейчас фильтр реализован через изменение поля View.SelectionFormula. При закрытии представления значение фильтра автоматически сбрасывается в исходное (вызывается View.SelectionFormula = "SELECT ..."). Все работает хорошо.
Только при каждом открытии базы в статусбаре выводится "document has been modified or corrupted since signed! (data)". Если значение SelectionFormula не изменять, то все проходит хорошо.
Поэтому вопрос: какие есть варианты реализации фильтра чтобы не было такой ошибки или же можно как-то "откатить" значение SelectionFormula в первоначальное состояние? И попутно: возможно ли генерировать формулу выборки для представления динамически? А то получается что некоторые представления отличаются одним полем всего, хотелось бы как-то это все упростить.
Заранее благодарен.
 

nvyush

Lotus team
22.04.2009
2 317
0
#2
document has been modified or corrupted since signed
Всегда считал что данное сообщение выводится, когда подписанный документ затем модифицируется в бэкэнде, например, агентом. По крайней мере связи с формулой отбора не замечал.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#4
После изменения SelectionFormula, необходимо взять документ вида и выполнить метод .Sign(), потом не забыть .Save()
 
A

AlexeyStaf

#5
После изменения SelectionFormula, необходимо взять документ вида и выполнить метод .Sign(), потом не забыть .Save()
А если с базой работает много пользователей одновременно? Или же они будут подписывать каждый свое представление?

Добавлено:
стоит задуматься о принципах работы домины...
отбор нужен с опред целью, сложный фронтэнд можно делать внешними средствами
выборку доков можно осущ.:
-DbSearch
-FT search
-GetAllDocumentsByKey
-GetAllEntriesByKey
...
всё зависит от задачи
Смысл в том, что пользователь перемещается по списку, где каждой записи должено соответствовать свое представление, в котором можно задать еще и фильтр. В каждом представлении может отображаться довольно-таки много документов (от десятков до нескольких тысяч). В какую сторону лучше тогда копать, чтобы производительность была пошустрее?
 

Omh

Lotus team
04.07.2007
2 210
1
#6
Сообщение потому что меняешь элемент дизайна (view.SelectionFormula) и не подписываешь его потом.
Решение годиться только для single-user базы.
 
A

AlexeyStaf

#7
Сообщение потому что меняешь элемент дизайна (view.SelectionFormula) и не подписываешь его потом.
Решение годиться только для single-user базы.
Мне этот вариант сразу не понравился ;)
Сам понимаю, что решение с огромным количеством вьюх выглядит некрасиво, поэтому и ищу какую-то альтернативу...
 

nvyush

Lotus team
22.04.2009
2 317
0
#8
Смысл в том, что пользователь перемещается по списку, где каждой записи должено соответствовать свое представление, в котором можно задать еще и фильтр. В каждом представлении может отображаться довольно-таки много документов (от десятков до нескольких тысяч).
Может список в Outline вынести? Обычно так делается. А фильтрацию можно штатную использовать, задействовать хранимые фильтры.
 

Omh

Lotus team
04.07.2007
2 210
1
#9
Смысл в том, что пользователь перемещается по списку, где каждой записи должено соответствовать свое представление
Количество записей фиксировано?
Если да, то кол-во записей = кол-во view
Если нет, что-то вроде ShowSingleCategory


в котором можно задать еще и фильтр
db.Search/db.FTSearch + отображение по желанию: RichText, Html, внешний файл