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

Тема в разделе "Lotus - Программирование", создана пользователем Wanderer, 24 авг 2006.

  1. Wanderer

    Wanderer Lotus team
    Lotus team

    Регистрация:
    23 мар 2006
    Сообщения:
    367
    Симпатии:
    13
    Возможно ли создание агента по сжатию БД в АК? Чтобы можно было просто встать на нужную уч.запись в АК и стартовать агента.
    Если кто-то подскажет код агента или хотя бы в каком направлении идти, буду безмерно благодарен.
     
  2. Wanderer

    Wanderer Lotus team
    Lotus team

    Регистрация:
    23 мар 2006
    Сообщения:
    367
    Симпатии:
    13
    Либо каким-то запросом/действием от пользователя можно реализовать инициализацию процедуры сжатия почтовой базы сервером?
    По умолчанию у пользователей нет прав на сжатие своей БД (уровень доступа - редактор).
     
  3. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Смотри в документе в АК поля "mailserver" и "mailfile".

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    А вообще это в Администраторе делается.
     
  5. Wanderer

    Wanderer Lotus team
    Lotus team

    Регистрация:
    23 мар 2006
    Сообщения:
    367
    Симпатии:
    13
    Про Администратора в курсе, разумеется ;)
    Просто стоит задача переложить функцию по сжатию БД на НЕадминистратора - установка ему приложения Domino Administrator не желательна.

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

    Wanderer Lotus team
    Lotus team

    Регистрация:
    23 мар 2006
    Сообщения:
    367
    Симпатии:
    13
    Да, чувствуется, что не хватает теоретической базы мне.
    Попробовал создать агент и вписать в него, что указал Medvedic - не прошло.

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Ты покажи что написал. И что не прошло.
     
  8. Wanderer

    Wanderer Lotus team
    Lotus team

    Регистрация:
    23 мар 2006
    Сообщения:
    367
    Симпатии:
    13
    Делал по наитию:
    в раздел DocumentSelection вписал
    в раздел Initialize
    Вот такой агент получился. Чувствую, что бред сотворил, но не знаю, с какого конца подойти.

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Агента нужно создавать в АК.
    Раздел DocumentSelection оставить пустым.
    Trigger: "Action menu selection", если запускать из меню или "Agent list selection", если иначе.
    Target - "All selected document"

    В Initialize пишем:
    Код (Text):
    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 документа в параметре.
    Код кнопки вот такой:
    Код (Text):
    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 пишем:
    Код (Text):
    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

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

    Wanderer Lotus team
    Lotus team

    Регистрация:
    23 мар 2006
    Сообщения:
    367
    Симпатии:
    13
    Из суеверия благодарить раньше времени не буду - чтобы заработало всё без проволочек. :)
    Пробую. Думаю, такая вещь полезна будет не только мне.
     
  11. Wanderer

    Wanderer Lotus team
    Lotus team

    Регистрация:
    23 мар 2006
    Сообщения:
    367
    Симпатии:
    13
    По первому коду агента для пользователя с правами админа:
    Написал агента, подписан он подо мной, имеющим полные админские права.

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: Wanderer
    Да. В первом куске здесь ошибка:
    Set dc = db.UnprocessedDocuments
    Должно быть
    Set dc = curdb.UnprocessedDocuments

    Next не нужен. :)
     
  13. Wanderer

    Wanderer Lotus team
    Lotus team

    Регистрация:
    23 мар 2006
    Сообщения:
    367
    Симпатии:
    13
    Первый кусок поправил. При попытке запустить агент выдается следующее сообщение:
     
  14. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Тогда облом. :)
    Метод работает только на локальных базах.
     
  15. Wanderer

    Wanderer Lotus team
    Lotus team

    Регистрация:
    23 мар 2006
    Сообщения:
    367
    Симпатии:
    13
    Такая хорошая идея и так завершилась бесславно. :(
    Неужели нельзя никак обойти проблемы с работой агента только на локальных базах??
     
Загрузка...
Похожие Темы - Compact адресной книге
  1. anna
    Ответов:
    11
    Просмотров:
    864
  2. dimat
    Ответов:
    7
    Просмотров:
    1.620
  3. akat
    Ответов:
    6
    Просмотров:
    1.739
  4. lensu1
    Ответов:
    11
    Просмотров:
    4.179
  5. akat
    Ответов:
    0
    Просмотров:
    1.275

Поделиться этой страницей