Список всех баз почты

Тема в разделе "Lotus - Программирование", создана пользователем FilFly, 5 мар 2011.

  1. FilFly

    FilFly Гость

    Помогите плиз советом! Есть такая задача получать список баз ПОЧТЫ (почта храниться в дата папке mail сервера) при выборе сервера и запускать по ним агент...
    Для этого я создал документ с настроичными полями агента...
    Проблема с получением списка баз.. пока получаю этот список с помощью явного указания пути к файлам почты(в поле path) т.е. :
    path=Cstr(doc.path(0)) & "\*.*"
    Fname=Dir(path,0)
    Do While Fname<>""
    Print Fname
    Set Db = ss.GetDatabase("имя сервера", "mail\" +Fname, False)
    If Db Is Nothing Then
    Messagebox "NetA Bd", , "BaDDDddd"
    Else
    If DB.IsOpen Then
    Messagebox "Ura" & db.FileName,, "URaaaa"
    End If
    End If

    Fname=Dir()
    Loop

    Этот способ не очень т.к. серверов более 10-ти ...
    Вопрос а можно как нибудь получать список баз при выборе сервера и по нему делать цикл...

    Есть мысль делать это через бд Catalog там искать все документы у которых поле Pathname содержить mail\
    И от туда забирать название базы и уже методом GetDatabase делать с этой базой что нужно...

    Может есть еще более простые решения??? Был бы признателен тем кто подскажет более простой способ!!
     
  2. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Обычно для этого используют класс NotesDbDirectory
     
  3. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    +
    Проверить, является ли БД почтовой, можно получив какой-нибудь специфичный элемент дизайна.
     
  4. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    способы одно, а цель этого действа?
    -дизайн менять - есть процесс специальный (выкладываем нужный темплэйт на сервера)
    -писать/читать ноты - роутер для этого...
     
  5. FilFly

    FilFly Гость

    Цель почистить уведомлялки поступающие в почту, при этом нужные доки не трогать ...
    Я все же сделал по совету nvy с помощью класса NotesDbDirectory:

    Set Db2= dbdir.GetFirstDatabase(DATABASE)
    Do While Not (Db2 Is Nothing)
    If db2.Open(doc.servername(0), db2.FilePath) Then

    pathDb= Mid$(Db2.FilePath, 1, 5)
    If Strcompare(pathDb, "mail\",0) = 0 Then ...
    Else (а иначе следующий документ)
    Goto nexto
    End If
    End If
    Nexto:
    Set Db2=dbdir.GetNextDatabase

    Не знаю на сколько правильно но протестил.. вроде пока ошибок нет ))
     
  6. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    FilFly
    Неясен смысл строки If db2.Open(doc.servername(0), db2.FilePath) Then
    Свойство базы FilePath доступно и без открытия базы — зачем тратить на это время/ресурсы? И ни к чему в цикле всё время получать значение поля документа — лучше перед циклом сохранить его в переменной.
     
  7. FilFly

    FilFly Гость

    Хм.. да спасибо можно сначала проверку делать а потом открывать базу...
    Навыков нет писать заранее правильный код )) поэтому решил просто двух зайцев убить.. прочитал
    что метод GetNextDatabase базу не открывает, поэтому вставил If db2.Open... т.к. базу то все равно надо открыть - мне из нее еще надо коллекцию удаляемых документов получать


    А по значению поля документа pathDb= Mid$(Db2.FilePath, 1, 5) он сравнивает лежит ли эта база в папке mail\ т.е. как я понимаю перед циклом не сохранит, т.к. это будет путь от старой базы
     
  8. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Я имел ввиду doc.servername(0).
     
  9. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    и у базы есть св-во - имя темплэйта
    вот по нему и надо ориентироваться, а не по пути иимени базы
    Код (Text):
    Function GetDbByTemplate(template As String) As NotesDatabase
    On Error Goto ErrH
    Dim directory As NotesDbDirectory
    Dim doc As NotesDocument
    Set directory = New NotesDbDirectory( db.Server )
    Dim tmp As NotesDatabase
    Set tmp = directory.GetFirstDatabase( DATABASE )
    While Not ( tmp Is Nothing )
    If ( tmp.DesignTemplateName = template ) Then
    If Not tmp.Open( "", "" ) Then Exit Function
    Set GetDbByTemplate=tmp
    Exit Function
    End If
    Set tmp = directory.GetNextDatabase
    Wend
    Quit:
    Exit Function
    ErrH:
    Error Err, RaiseError
    End Function
    Добавлено: в коде глобальная db и выход по нахождению шаблона/ошибке открытия (из либы выдернул)
    меняйте сообразно целям
     
  10. FilFly

    FilFly Гость

    Спасибо за этот вариант, но просто помню что у нас несколько шаблонов почты(и вдруг у кого-нить еще и каие нить старые шаблоны остались) .. поэтому решил все же по пути
     
  11. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    lmike
    Красиво, но не всегда применимо. Бывает, что у почтовых баз разные шаблоны (например, у одних — русский, у других — английский)
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    что мешает составить шаблонный список?
     
  13. FilFly

    FilFly Гость

    Спасибо БОЛЬШОЕ за конструктивные советы! Тема закрыта
     
  14. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    а для схожих вариантов - Like
    для точных Not IsNull(ArrayGetIndex(...,...,5))
     
Загрузка...

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