Compact в адресной книге

Wanderstep

Lotus Team
23.03.2006
493
66
BIT
26
Возможно ли создание агента по сжатию БД в АК? Чтобы можно было просто встать на нужную уч.запись в АК и стартовать агента.
Если кто-то подскажет код агента или хотя бы в каком направлении идти, буду безмерно благодарен.
 

Wanderstep

Lotus Team
23.03.2006
493
66
BIT
26
Либо каким-то запросом/действием от пользователя можно реализовать инициализацию процедуры сжатия почтовой базы сервером?
По умолчанию у пользователей нет прав на сжатие своей БД (уровень доступа - редактор).
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Смотри в документе в АК поля "mailserver" и "mailfile".

Запускаем агент с ID текущего документа: NotesAgent.RunOnServer(doc.NoteID)
В агенте почтовую базу получаем так:
NotesDocument.GetDatabase(doc.mailserver(0) , doc.mailfile(0))
Дальше NotesDatabase.Compact
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
А вообще это в Администраторе делается.
 

Wanderstep

Lotus Team
23.03.2006
493
66
BIT
26
Про Администратора в курсе, разумеется ;)
Просто стоит задача переложить функцию по сжатию БД на НЕадминистратора - установка ему приложения Domino Administrator не желательна.

За подсказку большое спасибо - будем пробовать.
 

Wanderstep

Lotus Team
23.03.2006
493
66
BIT
26
Да, чувствуется, что не хватает теоретической базы мне.
Попробовал создать агент и вписать в него, что указал Medvedic - не прошло.

Можно ли поподробнее расписать, как написать агент, позволяющий из АК сжимать базы?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Ты покажи что написал. И что не прошло.
 

Wanderstep

Lotus Team
23.03.2006
493
66
BIT
26
Делал по наитию:
в раздел DocumentSelection вписал
NotesDocument.GetDatabase(doc.mailserver(0) , doc.mailfile(0))
в раздел Initialize

Вот такой агент получился. Чувствую, что бред сотворил, но не знаю, с какого конца подойти.

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

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Агента нужно создавать в АК.
Раздел DocumentSelection оставить пустым.
Trigger: "Action menu selection", если запускать из меню или "Agent list selection", если иначе.
Target - "All selected document"

В Initialize пишем:
Код:
Dim session As New notesSession
Dim curdb As NotesDatabase
Dim maildb As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim i As Long

Set curdb = session.CurrentDatabase	
Set dc = db.UnprocessedDocuments
For i = 1 To dc.Count
Set doc = dc.GetNthDocument(i)
Set maildb = session.GetDatabase(doc.mailserver(0) , doc.mailfile(0))
Call maildb.Compact
Next
Вроде так.
Соответственно у пользователя должны быть необходимые права.
Если прав нет или нет желания давать, то надо чуть по-другому делать.
В представлении в АК сделать кнопку. Где вызывать агента методом notesAgent.RunOnServer с ID документа в параметре.
Код кнопки вот такой:
Код:
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim agent As notesAgent
Dim uiview AS notesUIView
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim i As long

Set db = session.CurrentDatabase
Set agent = db.GetAgent("наш агент")
Set uiview = ws.CurrentView
Set dc = uiview.Documents
for i = 1 to dc.Count
Set doc = dc.GetNthDocument(i)
Call agent.RunOnServer(doc.NoteID)
Next i

В агенте Trigger ставим On Schedule.
Target: "All documents"
Trigger: "Action menu selection", если запускать из меню или "Agent list selection", если иначе.
Target - "All selected document"

В Initialize пишем:
Код:
Dim session As New notesSession
Dim curdb As NotesDatabase
Dim agent As NotesAgent
Dim maildb As NotesDatabase
Dim doc As NotesDocument

Set curdb = session.CurrentDatabase
Set agent = session.CurrentAgent
Set doc = curdb.GetDocumentByID(agent.ParameterDocID)
Set maildb = session.GetDatabase(doc.mailserver(0) , doc.mailfile(0))
Call maildb.Compact
Next
Подписываем админом и, если нигде не ошибся, то должно работать. :D

Во накатал-то.
 

Wanderstep

Lotus Team
23.03.2006
493
66
BIT
26
Из суеверия благодарить раньше времени не буду - чтобы заработало всё без проволочек. :)
Пробую. Думаю, такая вещь полезна будет не только мне.
 

Wanderstep

Lotus Team
23.03.2006
493
66
BIT
26
По первому коду агента для пользователя с правами админа:
Написал агента, подписан он подо мной, имеющим полные админские права.

В АК встаю на строчку уч. записи или выделяю её, пытаюсь запустить агента, выдает ошибку:
Variant does not contain an object

Вариант для обычного пользователя с кнопкой в представлении АК опробую уже в понедельник. Но уже есть вопрос. В последнем третьем куске кода строчка Next не нужна, как я понимаю? Ведь цикла там нет.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: Wanderer
Да. В первом куске здесь ошибка:
Set dc = db.UnprocessedDocuments
Должно быть
Set dc = curdb.UnprocessedDocuments

Next не нужен. :)
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Тогда облом. :)
Метод работает только на локальных базах.
 

Wanderstep

Lotus Team
23.03.2006
493
66
BIT
26
Такая хорошая идея и так завершилась бесславно. :(
Неужели нельзя никак обойти проблемы с работой агента только на локальных базах??
 
Мы в соцсетях:

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