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

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

FilFly

Гость
#1
Помогите плиз советом! Есть такая задача получать список баз ПОЧТЫ (почта храниться в дата папке 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 делать с этой базой что нужно...

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 433
351
homepage.mac.com
#4
способы одно, а цель этого действа?
-дизайн менять - есть процесс специальный (выкладываем нужный темплэйт на сервера)
-писать/читать ноты - роутер для этого...
 
F

FilFly

Гость
#5
способы одно, а цель этого действа?
Цель почистить уведомлялки поступающие в почту, при этом нужные доки не трогать ...
Я все же сделал по совету 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

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

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#6
FilFly
Неясен смысл строки If db2.Open(doc.servername(0), db2.FilePath) Then
Свойство базы FilePath доступно и без открытия базы — зачем тратить на это время/ресурсы? И ни к чему в цикле всё время получать значение поля документа — лучше перед циклом сохранить его в переменной.
 
F

FilFly

Гость
#7
FilFly
Неясен смысл строки If db2.Open(doc.servername(0), db2.FilePath) Then
Свойство базы FilePath доступно и без открытия базы
Хм.. да спасибо можно сначала проверку делать а потом открывать базу...
Навыков нет писать заранее правильный код )) поэтому решил просто двух зайцев убить.. прочитал
что метод GetNextDatabase базу не открывает, поэтому вставил If db2.Open... т.к. базу то все равно надо открыть - мне из нее еще надо коллекцию удаляемых документов получать


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

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#8
А по значению поля документа pathDb= Mid$(Db2.FilePath, 1, 5) он сравнивает лежит ли эта база в папке mail\ т.е. как я понимаю перед циклом не сохранит, т.к. это будет путь от старой базы
Я имел ввиду doc.servername(0).
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 433
351
homepage.mac.com
#9
и у базы есть св-во - имя темплэйта
вот по нему и надо ориентироваться, а не по пути иимени базы
Код:
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 и выход по нахождению шаблона/ошибке открытия (из либы выдернул)
меняйте сообразно целям
 
F

FilFly

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

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#11
lmike
Красиво, но не всегда применимо. Бывает, что у почтовых баз разные шаблоны (например, у одних — русский, у других — английский)
 
F

FilFly

Гость
#13
Спасибо БОЛЬШОЕ за конструктивные советы! Тема закрыта
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 433
351
homepage.mac.com
#14
а для схожих вариантов - Like
для точных Not IsNull(ArrayGetIndex(...,...,5))