Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: CLI_Andreas_Schmidt am 15.02.04 - 16:40:55

Titel: Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: CLI_Andreas_Schmidt am 15.02.04 - 16:40:55
Hi an alle,

ich arbeite gerade an einem Agenten, der auf einem Server alle Maildatenbanken nacheinander aufrufen soll.

Ich habe zwar getnextdatabase gefunden, jedoch geht es leider nur über das directory und somit auf alle Datenbanken. Ich will aber Zugriff (nur) auf die Maildatenbanken. Also...

getfirst Maildatabase......agent.....fertig
getnextMaildatabase......agent.....fertig
getnextMaildatabase......

Fertig.

Hat jemand das auch schon mal probiert ?

Gruss

Andreas
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: Semeaphoros am 15.02.04 - 16:43:34
Musst Du wohl aus dem Adressbuch auslesen, eine andere zuverlässige Methode ist mir nicht bekannt.
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: eknori am 15.02.04 - 16:47:46
das geht nur ressourcenverschwenderisch über alle DB; du kannst aber die relevanten DB mittels db.path ( oder so ) ausfiltern.

Also wenn path nicht mail, dann zu nächsten DB sonst bearbeite aktuelle DB.

Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: animate am 15.02.04 - 16:50:08

Ich habe zwar getnextdatabase gefunden, jedoch geht es leider nur über das directory und somit auf alle Datenbanken. Ich will aber Zugriff (nur) auf die Maildatenbanken. Also...

getfirst Maildatabase......agent.....fertig
getnextMaildatabase......agent.....fertig
getnextMaildatabase......

Fertig.

du kannst dir doch ne Klasse schreiben, die die NotesDBDirectory-Klasse nutzt und dir dann deine eigenen getFirst/nextMailDB-Funktionen schreiben. Dazu brauchst du dann halt ein Kriterium, woran du eine MailDB erkennst (Name ihres Mastertemplates z.B.)
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: CLI_Andreas_Schmidt am 15.02.04 - 16:51:40
Hi eknori,

wie sieht den dann der code aus ? muss ich dann wissen, wie die Datenbank heißt ? oder kann ich sagen: db.path und dann mit getfirstDatabase und getnextdatabase dieses Verzeichnis durchlaufen ? Das würde mir schon reichen. Ich habe bisher nur zugreifen können, wenn ich den Namen der Datenbank kannte.

???

Scheint gar nicht so trivial zu sein.

Gruss

Andreas
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: eknori am 15.02.04 - 16:56:46
guck mal in die NotesDatabaseClass --> db.FilePath
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: eknori am 15.02.04 - 17:11:19
irgendwie so (

Sub Click(Source As Button)
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Set db = s.currentdatabase

path = db.filepath
file = db.filename
pos = Instr(path, file)
path = Left(path, pos-1)

   Msgbox path
End Sub

oder einfacher

Sub Click(Source As Button)
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Set db = s.currentdatabase
   
   path = Left(db.filepath, (Instr(db.filepath, db.filename) -1))
   
   Msgbox path
End Sub
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: eknori am 15.02.04 - 17:38:31
nu isser weg und ich sitze hier und warte auf ein feedback... :'(
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: Axel_Janssen am 15.02.04 - 20:54:07
@Andreas: eknoris Ansatz ist gut.
Wait a moment. Meine Kristallkugel sagt mir gerade, dass sich die Mailfiles möglicherweise, durch irgendwelche Zufälle in verschiedenen Verzeichnissen befinden.
Du mußt du den notesDatabase.path eben gegen ein Array testen.

Gruß Axel
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: koehlerbv am 15.02.04 - 20:59:53
Nicht gegen ein Array testen, sondern das machen, was Semeaphoros schon sagte: Sicher geht das nur über das Adressbuch.

Bernhard
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: Don Pasquale am 16.02.04 - 09:24:02
@Andreas: eknoris Ansatz ist gut.
Wait a moment. Meine Kristallkugel sagt mir gerade, dass sich die Mailfiles möglicherweise, durch irgendwelche Zufälle in verschiedenen Verzeichnissen befinden.
Du mußt du den notesDatabase.path eben gegen ein Array testen.

Gruß Axel

Hallo Axel,
verstehe ich das richtig ? Können die Postfächer wandern ?


Ciao
Don Pasquale
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: eknori am 16.02.04 - 09:28:33
Zitat
Können die Postfächer wandern

warum denn nicht ? Ich habe auch etliche Maildatenbanken in unterschiedlichen Verzeichnissen ( DirLink)
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: Semeaphoros am 16.02.04 - 09:42:26
Kommt dazu, dass Mailfiles ganz normale Datenbanken sind und sich nicht zuverlässig als Mehlpfeile identifizieren lassen.  Der Weg übers Adressbuch ist also unvermeidlich. Damit bekommt man aber solche Dateien nicht in den Griff, die nur als Replik auf dem Server liegen und bei denen Mail auf einem anderen Server eingeliefert wird.
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: Don Pasquale am 16.02.04 - 10:12:10
Zitat
Können die Postfächer wandern

warum denn nicht ? Ich habe auch etliche Maildatenbanken in unterschiedlichen Verzeichnissen ( DirLink)


Naja, es ist doch etwas anderes, ob ich Maildatenbanken an unterschiedlichen Orten speichere oder dieselbe Maildatenbank
sich heute hier und morgen dort befindet.

Nachfrage: Es ist also nicht klug den Zugriff auf eine Maildatenbank über ein Profildokument zu lösen in dem der Pfad steht ?

Ciao
Don Pasquale
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: Semeaphoros am 16.02.04 - 10:22:21
Auf EINE oder auf ALLE? Und wie häufig?

Natürlich lassen sich diese Angaben cachen, nur sollte man sie dann regelmässig mit dem Adressbuch abgleichen und einen Fallback haben, wenn man die Datei nicht mehr am ursprünglichen Ort findet. Mehlpfeile werden nun mal zwischendurch abgeschossen (gelöscht) oder von einem Köcher in einen anderen verschoben, auch wenn das nicht unbedingt speziell häufig ist. Und dann kommen ja auch mal neue User dazu, oder gibt es die bei Euch nicht?  :o
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: koehlerbv am 16.02.04 - 10:27:44
Wozu ein Profil-Document ?
Im Backend weiss der Server (oder mein Agent) über das Adressbuch, wo sich die gültige Mail-DB von User X befindet.
Im FrontEnd steht die Info im Location Document.

So what ?

Bernhard
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: Don Pasquale am 16.02.04 - 10:32:44
@V.B. Köhler
>Wozu ein Profil-Document ?
Wenn man es nicht besser weiß ?!
>Im Backend weiss der Server (oder mein Agent) über das Adressbuch, wo sich die gültige Mail-DB von User X befindet.
OK, wieder was gelernt !

>So what ?
Red Zac ?

:-)

Alles klar, mit diesem Infos sollte ich das sauber umsetzen können.

Ciao
Don Pasquale


Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: Christopher am 16.02.04 - 10:58:00
Hier wäre mal ein Beispiel Scritp was nur das Verzeichnis org und mail berücksichtigt:


Sub Initialize
   
   Dim Session As NotesSession
   Dim ws As NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   Dim NAB As NotesDatabase
   Dim NABServer As String
   Dim NABView As NotesView
   Dim NABDoc As NotesDocument
   Dim ServerMailFile As NotesDatabase
   Dim ServerDirectory As NotesDbDirectory
   Dim NABCollectList List As NotesDocumentCollection
   Dim FileFromNABList List As String   
   Dim FileFromServerList List As ServerFileType
   
   Set session = New NotesSession
   Set ws = New NotesUIWorkspace
   Set uidoc = ws.CurrentDocument
   Set doc = uidoc.Document
   
   'Specify the server from which to get user information
   
   
   If doc.serverver(0)="" Or doc.ServerToSearch(0)="" Then
      Msgbox "Kein Server oder Verzeichnis angegeben!"
      Exit Sub
   End If
   
   NABServer = doc.serverver(0)
   
     'Open the Public Address Book
   
   Print "Adressbuch öffnen"
   
   Set NAB = Session.GetDatabase(NABServer,"names.nsf")
   
   If NAB.IsOpen Then
      
         'Server\Mail users view and place all the documents in a collection (one for each server)
      
      Set NABView = NAB.GetView("Server\Mail Users")
      
      FileCount%=0
      
      Print "Ansicht ""Server\Mail Users""  öffnen"
      
      'For each speficied server, find all the mail files (you might need to edit this section to specify the correct mail directory)
      
      Forall TKServer In doc.ServerToSearch
         
         Set ServerDirectory = Session.GetDbDirectory(Cstr(TKServer))
         Set ServerMailFile = ServerDirectory.GetFirstDatabase(DATABASE)
         
         While Not ServerMailFile Is Nothing
            
         '   test=Left$(Ucase$(ServerMailFile.FilePath),5) = "MAIL\"
         '   test2=Left$(Ucase$(ServerMailFile.FilePath),5) = "ORG\"
            
            If Left$(Ucase$(ServerMailFile.FilePath),5) = "MAIL\" Or Left$(Ucase$(ServerMailFile.FilePath),4) = "ORG\" Then 'And Mid$(Ucase$(ServerMailFile.FilePath),6,7) <> "CLUSTER" Then
               
               ' Änderung 1 13.01.03 DH:
               ' es gibt auch DBen, die nicht auf ".NSF" enden (z.B. ".NS4"), deshalb robustere Selektion
               ' alter Code
               ' FileFromServerList(FileCount%).FilePath = Left$(Ucase$(ServerMailFile.FilePath),Instr(1,Ucase$(ServerMailFile.FilePath),".NSF")-1)
               ' neuer Code
               FileFromServerList(FileCount%).FilePath = Left$(Ucase$(ServerMailFile.FilePath),Instr(1,Ucase$(ServerMailFile.FilePath),".NS")-1)
               ' Ende Änderung 1 13.01.03
               FileFromServerList(FileCount%).ServerName = TKServer
               FileFromServerList(FileCount%).Owner = ServerMailFile.Title
               
            End If
            Set ServerMailFile = ServerDirectory.GetNextDatabase()
            FileCount%=FileCount%+1
         Wend
      End Forall   
      
      'Create an array list of the files in the mail directory
      
      i=0
      Forall TKServer In doc.ServerToSearch
         Set NABCollectList(i) = NABView.GetAllDocumentsByKey(Cstr(TKServer),False)
         i=i+1
      End Forall
      'For all the users in the Public address book for the same server, create an array list
      
      FileCount%=0
      
      
      
      Forall NABCollect In NABCollectList
         For NABCount% = 1 To NABCollect.count
            
            Set NABDoc = NABCollect.GetNthDocument(NABCount%)
            
            If Right$(Ucase$(NABDoc.MailFile(0)),4) = ".NSF" Then
               ' Änderung 2 13.01.03 DH:
               ' es gibt auch DBen, die nicht auf ".NSF" enden (z.B. ".NS4"), deshalb robustere Selektion
               ' alter Code
               ' FileFromNABList(FileCount%) = Left$(Ucase$(NABDoc.MailFile(0)),Instr(1,Ucase$(NABDoc.MailFile(0)),".NSF")-1)
               ' neuer Code
               FileFromNABList(FileCount%) = Left$(Ucase$(NABDoc.MailFile(0)),Instr(1,Ucase$(NABDoc.MailFile(0)),".NS")-1)
               ' Ende Änderung 2 13.01.03
            Else
               FileFromNABList(FileCount%) = Ucase$(NABDoc.MailFile(0))
            End If
            FileCount%=FileCount%+1
         Next
      End Forall
      
      'Compare the mail files found on the server to those in the Public address book.  Exit if found and continue
      
      Forall FileFromServer In FileFromServerList
         
         Found = False
         Print "Prüfe die  Maildatei " + FileFromServer.FilePath
         
         Forall FileFromNAB In FileFromNABList
            
            If FileFromServer.FilePath = FileFromNAB Then
               Found = True
               Exit Forall
            End If
            
         End Forall
         
         'If a mail file is not listed in the Public Address Book, flag it
         
         If Found = False Then
            Call uidoc.FieldAppendText ("MailFileName", FileFromServer.FilePath & Chr$(10))
            Call uidoc.FieldAppendText ("MailFileOwner", FileFromServer.Owner & Chr$(10))
            Call uidoc.FieldAppendText ("ServerName", FileFromServer.ServerName & Chr$(10))
         End If
         
      End Forall
      
   Else
      
      Messagebox("Kann das Adressbuch nicht öffnen :-(")
   End If
End Sub
Titel: Re:Alle Maildatenbanken auf dem Server bearbeiten
Beitrag von: Semeaphoros am 16.02.04 - 11:15:43
Hol Dir das Adressbuch über die Session, das muss nicht unbedingt names.nsf heissen