Свой поиск по базе с правами автора

seoman2

Green Team
17.02.2010
507
1
BIT
72
Делаю свой поиск по базе, у юзеров права автора.
1. В форме выбрал критерии поиска, например Form="Test".
2. Передал формулу серверному агенту, в котором к примеру вьюха.SelectionFormula = {Select Form="Test"}
3. У юзера Set view=db.GetView("вьюха")
Call workspace.ViewRebuild

Но workspace.ViewRebuild работает только с правами не ниже эдитора.
Приватные папки - тоже не рефрешатся.

Что делать?
 

Gandliar

Lotus Team
16.02.2004
566
26
BIT
124
Ну так серверным агентом и ребилдить, раз им формулу менять.
Только для каждого пользователя свой вид должен быть в базе.
Создавайте именной вид для каждого пользователя по шаблону тем же агентом.
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
Что Вы имеете ввиду под именным видом?
Кстати.
Пользователь осуществляет поиск с вида оутлайна.
 
Последнее редактирование:

Gandliar

Lotus Team
16.02.2004
566
26
BIT
124
Например у вас есть вид "Поиск"
Вы можете сделать вид для пользователя типа "Поиск/CommonUserName" и открывать его через оутлайн
Или аналогичную папку и помещать результаты поиска в нее
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
Использовать личные представления (Shared, desktop private on first use ) ?
сделать вид для пользователя типа "Поиск/CommonUserName" и открывать его через оутлайн - есть пример кода? Не знаю как делать.
 

Gandliar

Lotus Team
16.02.2004
566
26
BIT
124
С личными представлениями проблема будет обновлять их дизайн
Создать в базе вид - в хелпе есть для notesdatabase createView
открыть через оутлайн - просто формулу написать открыть "вид/"+@name([cn];@userName)

а вид создавать при открытии бд пользователем
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
У меня есть форма поиска для юзера-автора, когда нажму мою кнопку "Найти документы", то не могу обновить вьюху.
workspace.ViewRebuild
createView сделаю серверным агентом.
И опять - как обновлю/перейду на неё?
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
В серверном агенте

Код:
view.SelectionFormula=Field_formula
 Call view.Refresh
Dim myView As NotesView
 Set myView = db.CreateView( "newView",, view )

В оутлайн "newView"
 

Gandliar

Lotus Team
16.02.2004
566
26
BIT
124
Допустим есть некий оутлайн
В оутлайне есть оутлайнЕнтри
В Оутлайн ентри выбираем NamedElement, view, а дальше указываем не конкретный вид, а формулу типа "newView\\"+@name([cn];@UserName)
чтобы после клика на оутлайнЕнтри открылся вид с названием "newView\Ivan Ivanov" где Ivan Ivanov - коммон имя текущего пользователя

Соответственно при открытии базы пользователем такой вид должен быть создан, если его нет

Set notesView = notesDatabase .CreateView( [ viewName$ ] , [ viewSelectionFormula$ ] , [ templateView ] , [ prohibitDesignRefreshModifications ] )

Например Ваш шаблон называется "newView"

Set notesView = notesDatabase .CreateView( "newView\\"+session.commonUserName , [ viewSelectionFormula$ ] , "newView" , false)
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
233
Я вообще не понимаю, зачем нужно использовать ViewRebuild; ни разу её не использовал.
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
45
Я вообще не понимаю, зачем нужно использовать ViewRebuild; ни разу её не использовал.
Без ребилда, после изменения селекшина, изменений на экране не будет, против предыдущего селекшина.
Ващще, изменение селекшин формулы для динамического поиска доков, сомнительный ход, имхо.
 

Gandliar

Lotus Team
16.02.2004
566
26
BIT
124
Без ребилда, после изменения селекшина, изменений на экране не будет, против предыдущего селекшина.
Ващще, изменение селекшин формулы для динамического поиска доков, сомнительный ход, имхо.
А если переоткрыть вид?
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
45
А если переоткрыть вид?
не, или ребилд в УИ или апдолл в беке, типа:
Dim dbName As String
dbName = db.FileName
Dim result As Integer
result = Shell("NUPDALL.exe "+dbName+" -r -t "+ "MyView")
. . . . .
эт если в клиента с приватныи видом, на сервере, навер, для этого, случая не стоит
тут, пока не сапдейтится, скрипт дальше не пойдёт, что и нужно, для логики

или, как ты написал, пересобирать вид с новым селекшином, удаляя старый и создавая новый, но не комильфо это, имхо
 
Последнее редактирование:

Gandliar

Lotus Team
16.02.2004
566
26
BIT
124
Вот на уровне идеи предлагаю

1. сделать вид, содержащий все документы в которых необходим поиск
2. сделать агент "select" в котором собрать формулу селекшена и записать ее в переменную в нотес ини "mySearch"
3. сделать формульный агент выбора документов "find" который берет формулу из нотес ини в агенте справа снизу в менюхе "Select documents in view"
SELECT @Environment("mySearch")
4. сделать кнопку поиск в виде

@Command([RunAgent];"select");
@Command([RunAgent];"find")
@Command([ViewShowOnlySelected])

расскажете, что получилось
 
  • Нравится
Реакции: seoman2

seoman2

Green Team
17.02.2010
507
1
BIT
72
В Оутлайн ентри выбираем NamedElement, view, а дальше указываем не конкретный вид, а формулу типа "newView\\"+@name([cn];@UserName)
Не работает, нет прав у автора. Не переходит юзер на созданый вид.
 
Последнее редактирование:

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
233
Без ребилда, после изменения селекшина, изменений на экране не будет, против предыдущего селекшина.
Формулу отбора в вид нет смысла менять. Если такое нужно, используем NotesDatabase.Search, - скорость та же самая.
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
45
Формулу отбора в вид нет смысла менять. Если такое нужно, используем NotesDatabase.Search, - скорость та же самая.
Не в скорости дело, иногда требуется интерактивность в виде, при добавлении доков вообще, а не слепок search на момент времени.
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
2. сделать агент "select" в котором собрать формулу селекшена и записать ее в переменную в нотес ини "mySearch"
Не подходит, юзерам нужно видеть, какие документы они читали, какие нет. Ставить и снимать селект - не вариант.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!