Autor Thema: Quoten automatisiert setzen  (Gelesen 3655 mal)

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Quoten automatisiert setzen
« am: 16.11.12 - 11:05:43 »
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
« Letzte Änderung: 19.11.12 - 14:06:18 von Keydins »
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Quoten automatisiert setzen
« Antwort #1 am: 16.11.12 - 11:10:56 »
Ändere mal Deine DB-Deklaration:
Dim db As New NotesDatabase ("", "")

Bernhard

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Re: Quoten automatisiert setzen
« Antwort #2 am: 16.11.12 - 11:39:24 »
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
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Quoten automatisiert setzen
« Antwort #3 am: 16.11.12 - 13:08:01 »
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.

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.
Gruß
Johnson

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Re: Quoten automatisiert setzen
« Antwort #4 am: 19.11.12 - 14:06:01 »
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.
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

Offline Pfefferminz-T

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.204
Re: Quoten automatisiert setzen
« Antwort #5 am: 21.11.12 - 08:31:14 »
Solch ein Parameter wäre mir nicht bekannt. Meines Wissens nach ist die Quota eine Eigenschaft einer einzelnen Instanz einer Datenbank, die nicht repliziert wird.

Grüsse,
Thorsten
Grüsse,
Thorsten

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Re: Quoten automatisiert setzen
« Antwort #6 am: 21.11.12 - 08:59:33 »
Hmm, dann habe ich den Eintrag in der Domino-Admin-Hilfe möglicherweise falsch interpretiert:

Zitat
Von Domino Administrator aus
  1.   Klicken Sie auf das Register "Konfiguration".
  2.   Erweitern Sie im Aufgabenfenster den Eintrag "Server" und klicken Sie anschließend auf "Konfigurationen".
  3.   Führen Sie einen der folgenden Schritte aus:
Wenn für den gewünschten Server bereits ein Konfigurationsdokument vorhanden ist, öffnen Sie dieses Dokument und klicken Sie anschließend auf "Konfiguration bearbeiten".
Wenn für den gewünschten Server noch kein Konfigurationsdokument vorhanden ist, klicken Sie auf "Konfiguration hinzufügen" und fügen Sie den Namen des Servers im Feld "Gruppen- oder Servername" des Registers "Allgemein" hinzu.
  4.   Klicken Sie auf das Register "NOTES.INI-Einstellungen".
  5.   Klicken Sie auf "Parameter einstellen/ändern".
  6.   Wählen Sie "CLREPL_OBEYS_QUOTAS" im Feld "Element" aus oder geben Sie es ein.
  7.   Geben Sie im Feld "Wert" eine 1 ein.
  8.   Klicken Sie auf "Hinzufügen" und anschließend auf "OK".
  9.   Klicken Sie auf "Speichern und schließen".
Hinweis  Um Datenbank-Größenbeschränkungen wieder zu ignorieren, geben Sie in Schritt 7 im Feld "Wert" eine 0 (Null) ein oder löschen Sie die Einstellung "CLREPL_OBEYS_QUOTAS" aus dem Konfigurationsdokument.

Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

Offline Pyewacket

  • Senior Mitglied
  • ****
  • Beiträge: 310
  • Geschlecht: Männlich
Re: Quoten automatisiert setzen
« Antwort #7 am: 21.11.12 - 09:32:03 »
Das CLREPL_OBEYS_QUOTAS bezieht sich auf den Cluster Replikator.
Ist es aktiviert dann kann der Cluster Replikator keine Dokumente rüberschieben wenn dort die Quota überschritten würde. Die Einstellung von Quota und Warning muss auf jeder Clusterreplik einzeln erfolgen, das Property wird nicht mitrepliziert.

Die angesprochenen Datenbankproperties können bei geschlossener Datenbank nur GELESEN werden. Für Schreibzugriffe muss die DB geöffnet sein.

Einer unserer Kunden hat so eine ähnliche Applikation im Einsatz, die Datenbank dazu repliziert auf jeden Mailserver und stellt jede Nacht die Werte neu ein(falls notwendig) , abhängig von den Einstellungen die per OU/Server/Domäne vorgegeben werden können. Es gibt natürlich auch die unvermeidliche VIP Liste :-)

Gruss
 Peter
ATOS.org - Feel the music!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz