Удаление письма из базы

Тема в разделе "Lotus - Программирование", создана пользователем ruster83, 14 апр 2009.

Статус темы:
Закрыта.
  1. ruster83

    ruster83 Гость

    Нужен скрипт удалаяющий из почтовой базы каждого пользователя одно письмо с определенной темой, если таковое есть в почтовой базе,
    базы находятса на сервере в директории mail
     
  2. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Вижу примерно так:

    1. Агент подписанный сервером (что был доступ к mail базам)
    2. NotesDbDirectory (перебор баз)
    3. Search или какой-нибудь GetDocumentByKey (для поиска)
    4. Собственно удаление
     
  3. ruster83

    ruster83 Гость

    Не могли бы подсказать,как реализовать переборку баз с NotesDbDirectory (пункт 2). Это наиболее сложная для меня задача...
     
  4. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Код (Text):
    Dim NotesDir As New NotesDbDirectory(MailServerName)
    Dim TmpDb As NotesDatabase
    Set TmpDb = NotesDir.GetFirstDatabase(TEMPLATE_CANDIDATE)
    While Not TmpDb Is Nothing
    'тут делаем проверку путей, поиск и прочее
    Set TmpDb = NotesDir.GetNextDatabase
    Wend
    off: давай на "ты"
     
  5. ruster83

    ruster83 Гость

    Хорошо буду на "ты". Я не знаю как сделать чтобы проверял только папку mail котрая на сервере. Ведь TEMPLATE_CANDIDATE - любая база, которая может быть шаблоном. Т.е. он все подряд убдет проверять....Как сделать чтобы он только по указанной мною папке пробегался...???
     
  6. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Код (Text):
    if Lcase(Left(TmpDb.Filepath, 4)) = "mail" then
    'тра-ля-ля
    end if
    Ну или что-то в этом роде :)
     
  7. Murtas

    Murtas Well-Known Member

    Регистрация:
    11 апр 2006
    Сообщения:
    123
    Симпатии:
    0
    вариант №48 :)

    бегаем по народу из адресной книжки - у персоны есть поле "Mail file"
     
  8. ruster83

    ruster83 Гость

    Так...а как теперь найти документ если известно только поле....???
     
  9. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Murtas, можно и так :)
    ruster83, мат послал? ;)
     
  10. ruster83

    ruster83 Гость

    Нет матов не слал, это у меня самого привычка такая точки ставить в сообщениях. Как теперь поиск осущетсвить в полученных базах нужного документа,а???
     
  11. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Я имел в виду мат юзерам послал :)
    А то зачем ещё письма срочно удалять?

    Ну найти можно примерно так (этот скрипт внутри цикла, перебирающего базы):
    Код (Text):
    Dim Dc As NotesDocumentCollection
    Set Dc = TmpDb.Search({Subject = "матный сабжегд"}, Nothing, 0)
    if Dc.Count > 0 then Call Dc.RemoveAll(True)
    Вроде, в мейл базах софтделишены по умолчанию включены, поэтому может понадобится перебрать найденную коллекцию и на каждый док наускать
    Код (Text):
    RemovePermanently(True)
     
  12. ruster83

    ruster83 Гость

    пишет вот такую фиговину: Database Ruslan!!mail\abon.nsf has not been opened yet. Что это значит??? Сервер называется Ruslan
     
  13. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Я бы делал примерно так (в цикле):
    Код (Text):
    Dim ProcessDb as New NotesDatabase("", "")
    Call ProcesDb.Open(TmpDb.Server, TmpDb.Filepath)
    if ProcesDb.IsOpen then
    'понеслась
    end if
    Есть пара мест, где оптимизнуть, но лень.
     
  14. ruster83

    ruster83 Гость

    Что то все ранво не работает :) Теперь пишет Variant does not contain the object
     
  15. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ruster83, весь код покажи
     
  16. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Вот-вот :)
    И вообще, это дело надо запускть под тем юзером/сервером у которого есть права на mail-базы.
     
  17. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    сорь за флуд
    вспоминается ролик о техподдержке, когда веб-сервер положили :)
    Босс админу: "Вы что не читали мое письмо, что я Вам утром послал?"
    админ, сворачивает шутер, ломится в почтовую базу босса и удаляет исходящее: "Нет, не было письма"
    Босс, проверяя исходящие: "хм... нету... я был уверен, что послал"
    ;)
     
  18. ruster83

    ruster83 Гость

    Sub Click(Source As Button)
    Dim directory As NotesDbDirectory
    Dim db As NotesDatabase
    server$ = "Ruslan"
    Set directory = New NotesDbDirectory( server$ )
    dbType% = DATABASE'TEMPLATE_CANDIDATE
    Set db = directory.GetFirstDatabase( dbType% )
    counter% = 0
    While Not ( db Is Nothing )
    counter% = counter% + 1
    Set db = directory.GetNextDatabase
    If Cstr(Lcase(Left(db.Filepath, 4))) = "mail" Then
    Messagebox db.FilePath,,server$
    Dim ProcessDb As New NotesDatabase("", "")
    Call ProcessDb.Open(db.Server, db.Filepath)
    If ProcesDb.IsOpen Then
    Dim collection As NotesDocumentCollection
    Set collection = db.Search({Subject = "Test"} , Nothing,0)
    If collection.Count > 0 Then
    Print "Tete" ' Если все ништяк...
    End If
    End If
    End If
    Wend
    End Sub
     
  19. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Код (Text):
    Set collection = ProcessDb.Search({Subject = "Test"} , Nothing,0)
    Ну и переменную ProcessDb лучше вынести из цикла, а в цикле делать
    Код (Text):
    Set ProcessDb = New NotesDatabase("", "")
     
  20. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    А зачем нужна ProcessDb, если есть db?
    Заменить
    Код (Text):
    Dim ProcessDb As New NotesDatabase("", "")
    Call ProcessDb.Open(db.Server, db.Filepath)
    If ProcesDb.IsOpen Then
    на
    Код (Text):
    Call db.Open("", "")
    If db.IsOpen Then
    А можно сразу на:
    Код (Text):
    If db.Open("", "") Then
     
Загрузка...
Статус темы:
Закрыта.

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