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

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

Wanderstep

Lotus Team
23.03.2006
491
66
BIT
27
Возможно ли создание агента по сжатию БД в АК? Чтобы можно было просто встать на нужную уч.запись в АК и стартовать агента.
Если кто-то подскажет код агента или хотя бы в каком направлении идти, буду безмерно благодарен.
 
Либо каким-то запросом/действием от пользователя можно реализовать инициализацию процедуры сжатия почтовой базы сервером?
По умолчанию у пользователей нет прав на сжатие своей БД (уровень доступа - редактор).
 
Смотри в документе в АК поля "mailserver" и "mailfile".

Запускаем агент с ID текущего документа: NotesAgent.RunOnServer(doc.NoteID)
В агенте почтовую базу получаем так:
NotesDocument.GetDatabase(doc.mailserver(0) , doc.mailfile(0))
Дальше NotesDatabase.Compact
 
А вообще это в Администраторе делается.
 
Про Администратора в курсе, разумеется ;)
Просто стоит задача переложить функцию по сжатию БД на НЕадминистратора - установка ему приложения Domino Administrator не желательна.

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

Можно ли поподробнее расписать, как написать агент, позволяющий из АК сжимать базы?
 
Делал по наитию:
в раздел DocumentSelection вписал
NotesDocument.GetDatabase(doc.mailserver(0) , doc.mailfile(0))
в раздел Initialize

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

Один плюс в этой ситуации - подбил хоть начальство для себя на курсы по программированию, но они будут еще неизвестно когда, а агент уже сечас хотелось бы наваять.
 
Агента нужно создавать в АК.
Раздел 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

Во накатал-то.
 
Из суеверия благодарить раньше времени не буду - чтобы заработало всё без проволочек. :)
Пробую. Думаю, такая вещь полезна будет не только мне.
 
По первому коду агента для пользователя с правами админа:
Написал агента, подписан он подо мной, имеющим полные админские права.

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

Вариант для обычного пользователя с кнопкой в представлении АК опробую уже в понедельник. Но уже есть вопрос. В последнем третьем куске кода строчка Next не нужна, как я понимаю? Ведь цикла там нет.
 
Для: Wanderer
Да. В первом куске здесь ошибка:
Set dc = db.UnprocessedDocuments
Должно быть
Set dc = curdb.UnprocessedDocuments

Next не нужен. :)
 
Тогда облом. :)
Метод работает только на локальных базах.
 
Такая хорошая идея и так завершилась бесславно. :(
Неужели нельзя никак обойти проблемы с работой агента только на локальных базах??
 
Мы в соцсетях:

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