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

Wanderer

Lotus team
23.03.2006
413
15
#1
Возможно ли создание агента по сжатию БД в АК? Чтобы можно было просто встать на нужную уч.запись в АК и стартовать агента.
Если кто-то подскажет код агента или хотя бы в каком направлении идти, буду безмерно благодарен.
 

Wanderer

Lotus team
23.03.2006
413
15
#2
Либо каким-то запросом/действием от пользователя можно реализовать инициализацию процедуры сжатия почтовой базы сервером?
По умолчанию у пользователей нет прав на сжатие своей БД (уровень доступа - редактор).
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#3
Смотри в документе в АК поля "mailserver" и "mailfile".

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

Wanderer

Lotus team
23.03.2006
413
15
#5
Про Администратора в курсе, разумеется ;)
Просто стоит задача переложить функцию по сжатию БД на НЕадминистратора - установка ему приложения Domino Administrator не желательна.

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

Wanderer

Lotus team
23.03.2006
413
15
#6
Да, чувствуется, что не хватает теоретической базы мне.
Попробовал создать агент и вписать в него, что указал Medvedic - не прошло.

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

Wanderer

Lotus team
23.03.2006
413
15
#8
Делал по наитию:
в раздел DocumentSelection вписал
NotesDocument.GetDatabase(doc.mailserver(0) , doc.mailfile(0))
в раздел Initialize
Вот такой агент получился. Чувствую, что бред сотворил, но не знаю, с какого конца подойти.

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#9
Агента нужно создавать в АК.
Раздел 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

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

Wanderer

Lotus team
23.03.2006
413
15
#10
Из суеверия благодарить раньше времени не буду - чтобы заработало всё без проволочек. :)
Пробую. Думаю, такая вещь полезна будет не только мне.
 

Wanderer

Lotus team
23.03.2006
413
15
#11
По первому коду агента для пользователя с правами админа:
Написал агента, подписан он подо мной, имеющим полные админские права.

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

Medevic

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

Next не нужен. :)
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#14
Тогда облом. :)
Метод работает только на локальных базах.
 

Wanderer

Lotus team
23.03.2006
413
15
#15
Такая хорошая идея и так завершилась бесславно. :(
Неужели нельзя никак обойти проблемы с работой агента только на локальных базах??