Das Notes Forum

Domino 9 und frühere Versionen => ND6: Administration & Userprobleme => Thema gestartet von: aleroosen am 20.12.06 - 12:44:30

Titel: Kalendergröße
Beitrag von: aleroosen am 20.12.06 - 12:44:30
Hallo zusammen,

ich bin auf der Suche nach einer Möglichkeit die Gesamtgröße des Kalenders in einer Maildatenbank zu berechnen/darzustellen, also die Summe aller Kalendereinträge z.B. in der Ansicht Besprechungen. Hintergrund ist, dass einige unserer Anwender wissen möchten wieviel MB der Kalender im Mailfile in Anspruch nimmt. Kennt jemand eine Lösung hierfür?

Gruss Alex
Titel: Re: Kalendergröße
Beitrag von: Tode am 20.12.06 - 14:25:12
einfach eine Ansicht mit entsprechender Spalte erstellen, in der Spalte die Grösse anzeigen (@Doclength) und summieren... Oder Du ergänzt die Besprechungs- Ansicht um eine entsprechende Spalte.. ist in 2 Minuten erledigt, wenn man weiss was man tut...

Gruß
Tode
Titel: Re: Kalendergröße
Beitrag von: m3 am 20.12.06 - 14:37:41
Ich hab da einen Agent:
Code
 Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim dc As NotesDocumentCollection
Dim size As Long
Dim count As Long

Set db = session.CurrentDatabase
Set dc = db.Search( {Form="Appointment"}, Nothing, 0)

size = 0
count = 0

If( dc Is Nothing Or dc.Count = 0) Then
Messagebox "Keine Collection!"
Exit Sub
End If

Set doc = dc.GetFirstDocument
While( Not doc Is Nothing )
count = count + 1
size = size + doc.Size
Set doc = dc.GetNextDocument(doc)
Wend

Dim average As Double
average = size / count

Messagebox Cstr(count) & " Dokumente haben " & Cstr(size) & " bytes. Durchschnitt: " & Cstr(Average)

Exit Sub

ERRORHANDLING:
Print "Fehler"
Titel: Re: Kalendergröße
Beitrag von: koehlerbv am 20.12.06 - 14:45:21
Geiles ErrorHandling, Martin  ;D

Haarspalterei: Eigentlich gehören doch bestimmte "Notices" (Besprechungsinformationen) auch zum Kalender - die müsste man also "eigentlich" auch noch mitzählen.

Bernhard
Titel: Re: Kalendergröße
Beitrag von: m3 am 20.12.06 - 14:50:31
Geiles ErrorHandling, Martin  ;D
  :P
Ist mehr als in so manchem Code, den ich hier gefunden habe.  :'(

Zitat
Haarspalterei: Eigentlich gehören doch bestimmte "Notices" (Besprechungsinformationen) auch zum Kalender - die müsste man also "eigentlich" auch noch mitzählen.
Pipifax. benutzt doch eh keiner. ;)
IIRC hab ich mich an der Selektionsformel der Kalenderansicht orientiert.
Titel: Re: Kalendergröße
Beitrag von: koehlerbv am 20.12.06 - 15:44:35
Geiles ErrorHandling, Martin  ;D
  :P
Ist mehr als in so manchem Code, den ich hier gefunden habe.  :'(

Wohl war! Vor allem gibt es in Deinem Code kaum noch eine Stelle, wo der Agent auf die Nase fallen könnte.

"Notice" sind übrigens angenommene Einladungen, Umplanungen etc. - und ReponseDocs. Dadurch sind die dann auch mit in der Ansicht sichtbar. Da kann also eine erkleckliche Anzahl an Bytes zusammenkommen.

Bernhard
Titel: Re: Kalendergröße
Beitrag von: m3 am 20.12.06 - 16:54:23
Soda, damit die i-Tüpferl-Reitere aufhört:

Code
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim doc As NotesDocument
	Dim dc As NotesDocumentCollection
	Dim size As Long
	Dim count As Long
	
	On Error Goto ERRORHANDLING_SPEZIELL_FUER_koehlerbv
	
	Set db = session.CurrentDatabase
	Set dc = db.Search( {Form="Appointment" | Form ="Notice"}, Nothing, 0)
	
	size = 0
	count = 0
	
	If( dc Is Nothing Or dc.Count = 0) Then
		Messagebox "Keine Collection!"
		Exit Sub
	End If
	
	Set doc = dc.GetFirstDocument
	While( Not doc Is Nothing )
		count = count + 1
		size = size + doc.Size
		Set doc = dc.GetNextDocument(doc)
	Wend
	
	Dim average As Double
	average = size / count
	
	Messagebox Cstr(count) & " Dokumente haben " & Cstr(size) & " bytes. Durchschnitt: " & Cstr(Average)
	
	Exit Sub	
	
ERRORHANDLING_SPEZIELL_FUER_koehlerbv:	
	Messagebox( "Ein Fehler ist im Agenten 'Size Of Appointments' aufgetreten.Details: " & Error() & ", " & Err() & ", " &Erl() )

In meiner Mail-DB:
Ohne Notices: 4.143 Dokumente mit 59,7 MB
Mit Notices: 4.228 Dokumente mit 60,4 MB
Titel: Re: Kalendergröße
Beitrag von: Tode am 20.12.06 - 17:04:20
@Bernhard: ich habe einen Punkt gefunden, wo das Script auf die Nase allen kann...

Einen Punkt, auf den ich auch nie gekommen wäre, wenn ich nicht kürzlich selbst mal wieder drauf gestossen wäre:

Eine auf diese Art erzeugte Collection enthält manchmal (frag mich aber nicht unter welchen Umständen, vielleicht muss einfach die DB gross genug sein) auch DeletionStubs.

Ob ein DeletionStub noch eine Eigenschaft size hat, weiss ich aus dem Stehgreif nicht, aber da könnte es ein Problem geben, wenn man nicht auf IsValid / Items (isDeleted liefert bekanntermassen nicht immer True zurück auch wenn es das sollte) prüft...

Nur um auch ein wenig "Klugscheisserei" zu diesem Thema beigetragen zu haben...  ;)

Tode
Titel: Re: Kalendergröße
Beitrag von: koehlerbv am 20.12.06 - 17:11:08
Torsten, das war eigentlich das einzige "kaum", was mir auch spontan eingefallen ist - exakt dieses. Eine üble Geschichte, und WARUM dem MANCHMAL so ist, habe ich auch noch nicht herausfinden können. Ich prüfe daher genauso wie Du auf eventuelle "Geister" ab.

DAS wollte ich aber nicht auch noch posten - das Thema des Threads ist ja nun nicht soooo weltbewegend, der Fragesteller hat sich keine 20 Minuten nach Fragestellung erstmal abgemeldet, und Martin hat meine Aufzieherei natürlich gar nicht verdient.

Nun kann man aber hoffen, dass per Zufall jemand mit dem "Geister-Dokumente"-Problem hierüber mal stolpert oder es doch möglichst viele lesen und irgendwie im Hinterkopf behalten. Obwohl es ja nun mit der Grösse aller Appointments / Notices nur sehr mittelbar zu tun hat.

Bernhard
Titel: Re: Kalendergröße
Beitrag von: m3 am 20.12.06 - 21:38:41
Tode, danke für den Hinweis, das war mir neu. Man sollte sich die Zeit nehmen, auch von "bekannten" Objekte ab und an die Doku lesen, dann findet man so was:
Zitat
A deletion stub is returned for a document deleted after creation of the collection or for a document to which you do not have read access. Use IsValid in NotesDocument to check whether a document is real (True) or a deletion stub (False).

Daher folgender Code:
Code
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim doc As NotesDocument
	Dim dc As NotesDocumentCollection
	Dim size As Long
	Dim count As Long
	
	On Error Goto ERRORHANDLING_SPEZIELL_FUER_koehlerbv
	
	Set db = session.CurrentDatabase
	Set dc = db.Search( {Form="Appointment" | Form ="Notice"}, Nothing, 0)
	
	size = 0
	count = 0
	
	If( dc Is Nothing Or dc.Count = 0) Then
		Messagebox "Keine Collection!"
		Exit Sub
	End If
	
	Set doc = dc.GetFirstDocument
	While( Not doc Is Nothing )
		'A deletion stub is returned for a document deleted after creation of the collection or for a document to which you do not have read access.		
		' Therefore: Check, if document is valid, otherwise it's a deletion stub.
		If doc.IsValid = True Then	' 
			count = count + 1
			size = size + doc.Size
		End If
		Set doc = dc.GetNextDocument(doc)
	Wend
	
	Dim average As Double
	average = size / count
	
	Messagebox Cstr(count) & " Dokumente haben " & Cstr(size) & " bytes. Durchschnitt: " & Cstr(Average)
	
	Exit Sub	
	
ERRORHANDLING_SPEZIELL_FUER_koehlerbv:	
	Messagebox( "Ein Fehler ist im Agenten 'Size Of Appointments' aufgetreten.Details: " & Error() & ", " & Err() & ", " &Erl() )
Titel: Re: Kalendergröße
Beitrag von: koehlerbv am 20.12.06 - 22:30:25
Das ist jetzt in keinster Weise kleinlich gemeint, ich bin vielmehr selber schon darüber gestolpert, dass selbst Isvalid nicht ausreichte. Daher folgender Vorschlag für einen Code, der bei mir seit 2003 in hunderten DBs nie einen Fehler brachte (was natürlich auch noch nichts zu sagen hat):

Code
If (doc.IsValid = True) And (Isarray (doc.Items)) True Then

Mit Torstens Posting scheint sich dies zu decken. Auch die Reihenfolge Isvalid / Isarray is wegen der Abarbeitung wichtig - wenn schon Isvalid auf die Nase fällt, würde Isarray erst recht scheitern, wird aber schon nicht mehr ausgeführt.

HTH,
Bernhard

PS: Aus der Frotzelei ist ja nun noch was wirklich wichtiges geworden  ;)
Titel: Re: Kalendergröße
Beitrag von: m3 am 21.12.06 - 11:06:36
So, das IsArray musst Du mir jetzt aber erklären. Das versteh ich nicht.
Titel: Re: Kalendergröße
Beitrag von: koehlerbv am 21.12.06 - 11:35:46
Ein gelöschtes Dokument (bzw. sein deletion stub) erkennt man auch daran, dass es schlicht keine Items mehr enthält. Stösst man auf solch ein "NotesDocument", ist mit diesem also etwas oberfaul.

Bernhard
Titel: Re: Kalendergröße
Beitrag von: m3 am 21.12.06 - 17:55:48
(http://buecherfreaks.knienieder.com/phpBB2/images/smiles/018.gif)
Titel: Re: Kalendergröße
Beitrag von: aleroosen am 11.01.07 - 10:53:35
Hallo zusammen,
vielen Dank für die ausführlichen Antworten. Ich habe als erstes den Vorschlag von Tode umgesetzt und mir eine persönliche Ansicht auf Grundlage der Besprechungsansicht erstellt und lasse mir dort für die Spalte Größe zusätzlich die Gesamtsumme anzeigen. Den von m3 aufgeführten Code werde ich auch noch testen, bin allerdings im Lotus Script nicht der fiteste, hoffe aber trotzdem damit zurechtzukommen.

Grüsse, Alex