Обновление индекса базы.

Kizarek86

Green Team
20.07.2007
875
8
BIT
119
Возможно ли программно обновить индекс всех представлений для пользователей у которых нет прав на обновление? кстати как определяются данные права? В настройка на сервере или по уровню доступа?
 
A

abbatik

Возможно ли программно обновить индекс всех представлений для пользователей у которых нет прав на обновление? кстати как определяются данные права? В настройка на сервере или по уровню доступа?

Можно написать агент, и подписать его сервером.
А дальше либо по расписанию его запускать, либо пользователь может запускать агент, который будет инициировать запуск агента от имени сервера.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Можно написать агент, и подписать его сервером.
А дальше либо по расписанию его запускать, либо пользователь может запускать агент, который будет инициировать запуск агента от имени сервера.
А что в агенте?
 

Kizarek86

Green Team
20.07.2007
875
8
BIT
119
Код:
	Dim views As Variant	
Set db = session.CurrentDatabase
views = db.Views
Forall v In views
Set View=v
Call View.Refresh
End Forall

например)
 
A

abbatik

Код:
	Forall v In db.Views
Call v.Refresh ()
End Forall

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

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Перестроит индексы видов, для их быстрого открытия, при наличии в базе большого кол-ва документов.
Не перестроит.
Кстати, я вопрос правильно понимаю? Что нужно перестроить индексы, а не обновить. Т.к. первое действительно требует прав.
И речь идет не про FT-индекс?
 
A

abbatik

Не перестроит.
Кстати, я вопрос правильно понимаю? Что нужно перестроить индексы, а не обновить. Т.к. первое действительно требует прав.
И речь идет не про FT-индекс?

Вы в праве конечно так думать, только я вам привожу пример рабочего кода, который это делает :)
Индекс видов конечно же он обновляет.

Для обновления FT индекса есть метод БД UpdateFTIndex.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Вы в праве конечно так думать, только я вам привожу пример рабочего кода, который это делает smile.gif
Индекс видов конечно же он обновляет.
Всё-таки непонятно.
Обновление индексов происходит периодически и автоматически(если не задали другие настройки).
Перестроение индексов этот код не делает.
Тогда зачем он?
 

Kizarek86

Green Team
20.07.2007
875
8
BIT
119
Ситуация такая, есть база, в которою из Excel загружаются данные, доступ к данным идет через портал. Как сразу после загрузки данных сделать чтобы на портале отобразилась корректная информация. Отображается она в представлении, следовательно нужно обновить данное представление) я правильно понимаю?)
 
A

abbatik

Всё-таки непонятно.
Обновление индексов происходит периодически и автоматически(если не задали другие настройки).
Перестроение индексов этот код не делает.
Тогда зачем он?

Смотри.
1. Получается, что индекс вида хранится на сервере (соответсвенно вида, хранящегося на сервере). И агент рефрешит именно этот серверный вид, т.е. перестраивает его серверный индекс.
2. FT индекс к этому индексу отношения не имеет.
 

Kizarek86

Green Team
20.07.2007
875
8
BIT
119
Обновляет, данные обновляются только после обновления индекса.
 

Kizarek86

Green Team
20.07.2007
875
8
BIT
119
У пользователя которые загружает данные нету прав на создание индекса) нужно обновить от имени другого пользователя)
Об этом и речь)
Нешедульный агент можно запустить от имени кого то другого?)))
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
У пользователя которые загружает данные нету прав на создание индекса) нужно обновить от имени другого пользователя)
Об этом и речь)
Нешедульный агент можно запустить от имени кого то другого?)))
Почему ты решил, что прав нет?
 
A

abbatik

У пользователя которые загружает данные нету прав на создание индекса) нужно обновить от имени другого пользователя)
Об этом и речь)
Нешедульный агент можно запустить от имени кого то другого?)))

Можно :)

Код:
	Const AgentName = <имя агента>

Dim ses As New NotesSession
Dim db As NotesDatabase


Set db = ses.CurrentDatabase
Set agent = db.GetAgent(AgentName)

If agent Is Nothing Then
Messagebox "Agent '" + AgentName + "' not found", 16, "Failure"
Else
If agent.RunOnServer = 0 Then
Messagebox "Agent '" + AgentName + "' ran", 64, "Success"
Else
Messagebox "Agent '" + AgentName + "' did not run", 16, "Failure"
End If
End If
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Эта кнопочка обновляет FT-индекс, который не влияет на видимость информации. Только на поиск.
 
Мы в соцсетях:

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