Domino 9 und frühere Versionen > ND8: Entwicklung
Quoten automatisiert setzen
Keydins:
Hallo zusamen,
ich versuche mich grade an einer Lösung für die automatische Anpassug der Quoten und Warnwerte der Maildatenbanken unserer Mitarbeiter. Das Auslesen der aktuellen Werte und die Berechnung der neu einzusetzenden Werte funktioniert schon, allerdings klappt das Schreiben der neuen Werte in die Datenbank leider (noch) nicht.
Das Verfahren läuft zur Zeit über eine Maske, in der der zu bearbeitende Server gewählt wird. Das Skript trägt zu Dokumentationszwecken alle relevanten Daten in die Maske ein, so dass man die Anpassungen bei Bedarf nachvollziehen kann.
Laut Beschreibung der Noteshilfe muss die Datenbank nicht geöffnet werden (SizeQuota property: ... The database does not need to be open to use this property).
Starte ich den Prozess über den Aktionsschalter in der Maske, erhalte ich die Fehlermeldung 'Database SERVER!!mail\maildatenbank has not been opend yet' (SERVER und maildatenbank sind Platzhalter, dort stehen in der Fehlermeldung die korrekten Angaben) sobald das Script die Zeile 'db.SizeQuota = quotaSize60 * 1024' erreicht.
Der Notesuser, mit der der Prozess gestartet wird, hat auf allen Servern und den Maildatenbanken administrative Rechte.
Hat jemand eine Idee warum das Verfahren nicht wie erwartet funktioniert?
Gruß Dirk
--- Code: ---Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Dim nServer As String
Dim count As Integer
Dim nSize As Double
Dim dbSizeAkt As Double
Dim qoutaSizeAkt As Double
Dim warnSizeAkt As Double
Dim quotaSize60 As Double
Dim warnSize85 As Double
Dim nSum As Double
Dim gsum As Double
nServer = uidoc.FieldGetText( "NotesServer" )
nSize = 0
Dim dbdir As New NotesDbDirectory(nServer)
Dim db As NotesDatabase
Set db = dbdir.GetFirstDatabase(DATABASE)
While Not(db Is Nothing)
If (Instr(Lcase$(db.FilePath), "mail\" ) > 0) And Not (Instr(Lcase$(db.FilePath), "archive" ) > 0)Then
count = count + 1
nSize = nSize + db.Size
dbSizeAkt = (db.Size / 1024 / 1024)
quotaSize60 = Round((dbSizeAkt * 100 / 65),-1)
If db.SizeQuota > 0 Then
qoutaSizeAkt = (db.SizeQuota / 1024)
If db.SizeWarning > 0 Then
warnSizeAkt = (db.SizeWarning / 1024)
End If
Else
qoutaSizeAkt = 0
warnSizeAkt = 0
End If
If quotaSize60 < 500 Then
quotaSize60 = 500
Elseif qoutaSizeAkt < quotaSize60 Then
quotaSize60 = qoutaSizeAkt
End If
warnSize85 = Round((quotaSize60 * 0.85),-1)
Call uidoc.FieldAppendText( "NameDB", Ucase(Strtoken(db.FileName,".",1)) & Chr(10))
Call uidoc.FieldAppendText( "Mitarbeiter", db.Title & Chr(10))
Call uidoc.FieldAppendText( "FileSize", db.Size & Chr(10))
Call uidoc.FieldAppendText( "qSize", qoutaSizeAkt & Chr(10))
Call uidoc.FieldAppendText( "wSize", warnSizeAkt & Chr(10))
Call uidoc.FieldAppendText( "qSize60", quotaSize60 & Chr(10))
Call uidoc.FieldAppendText( "wSize85", warnSize85 & Chr(10))
db.SizeQuota = quotaSize60 * 1024 '<--
db.SizeWarning = warnSize85 * 1024 '<--
End If
Set db = dbdir.GetNextDatabase
Wend
nSum = nSize / 1024
nSum = nSum / 1024
nSum = nSum / 1024
gsum = nSum
Call uidoc.FieldSetText( "SummeDB", Cstr(nSum))
Call uidoc.FieldSetText( "ges_SummeDB", Cstr(gSum))
Call uidoc.FieldSetText( "ges_AnzahlDB", Cstr(count))
Call uidoc.FieldSetText( "lo2_datum", Cstr(Today))
Call uidoc.FieldSetText( "lo2_uhrzeit", Cstr(Time))
Call uidoc.Refresh
End Sub
--- Ende Code ---
koehlerbv:
Ändere mal Deine DB-Deklaration:
Dim db As New NotesDatabase ("", "")
Bernhard
Keydins:
Danke für den Tip Bernhard, leider kam es trotzdem weiter zu besagtem Fehler.
Habe das Script jetzt wie folgt angepasst:
Dim db As New NotesDatabase ("","")
(...)
Call db.Open("","")
db.SizeWarning = warnSize85 * 1024
db.SizeQuota = quotaSize60 * 1024
Zuerst gab es einen neuen Fehler, lag allerdings daran, dass ich zuerst die Quote und dann die Warngröße angepasst habe. In der umgekehrten Reihenfolge klappts jetzt, auch wenn man es nicht unbedingt als performant bezeichnen kann. :o
Johnson:
Die Deklaration von Dim db as New NotesDatabase("", "") alleine bringt leider nichts.
Auszug aus der Hilfe:
--- Zitat ---
* A script that attempts to open a database to which it does not have access returns an error. A script needs at least Reader access to a database in order to open it. (! Der letzte Satz stimmt nicht ganz, wie ich vor wenigen Tagen herausfand.)
* A NotesDatabase retrieved from a NotesDbDirectory object is closed. The following properties are available on the closed database: Categories, DelayUpdates, DesignTemplateName, FileName, FilePath, IsOpen, Parent, ReplicaID, Server, SizeQuota, SizeWarning, TemplateName, Title. To access all the other properties and methods of a database retrieved from a NotesDbDirectory, a script must explicitly open the database.
* A NotesDatabase retrieved from the AddressBooks property in NotesSession is closed. The following properties are available on the closed database: FileName, FilePath, IsOpen, IsPrivateAddressBook, IsPublicAddressBook, Parent, Server. To access all the other properties and methods of a database retrieved from the AddressBooks property, a script must explicitly open the database.
* A NotesDatabase retrieved using New is closed if no database exists at the server$ and dbfile$ specified. The following properties are available on the closed database: FileName, FilePath, IsOpen, Parent, and Server.
--- Ende Zitat ---
Ich schreibe gerade an einer ähnlichen Anwendung, und gehe ebenfalls über das NotesDbDirectory durch die Datenbanken. SizeQuota und SizeWarning kann ich auch auslesen, wenn die Datenbank nicht geöffnet ist.
Dein Problem wird wohl eher die Zeile "nSize = nSize + db.Size" gewesen sein. Für die Size-Eigenschaft muss die Datenbank geöffnet werden, wenn sie über das NotesDbDirectory erhalten wird. (s. Hilfetext oben)
Das stimmt in der Hilfe zu NotesDatabase.Size leider auch nicht so 100%ig.
Keydins:
An der Zeile "nSize = nSize + db.Size" lag es definitiv nicht, da das Script ohne die beiden Zeilen mit den Schreibzugriffen für die neuen Quoten und Warnlevel problemlos durchgelaufen ist.
Die Performance ist inzwischen auch sehr gut, scheinbar hatte der Notesclient beim ersten Testaluf irgendein Problem. Nach einem Neustart lief das ganze flott durch.
Inzwischen syncronisiere ich mit dem Script auch die Quoten zwischen unseren geclusterten Mailservern. Der notes.ini Parameter, der die Replikation der Quoten innerhalb des Clusters eigentlich aktivieren sollte, wird von unseren Servern aus nicht ersichtlichem Grund ignoriert.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln