Autor Thema: Ältestes Dokument in DB ermitteln  (Gelesen 3774 mal)

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Ältestes Dokument in DB ermitteln
« am: 19.04.08 - 10:52:16 »
Jemand eine Idee, wie man das älteste Dokument einer Datenbank ermittelt, ohne großartig über Views zu gehen?.

Es geht darum, zu bestimmen, wie viele Dokumente in allen Datenbanken eines bestimmten Jahrgangs sind. Also z.B. alle Memos und replies mit Anhängen von 1999.

Ich könnte das über ein db.search machen und dabei @Year(@Date(DeliveredDate)) = "1999" prüfen, ob mein db.search ein col.count > 0 liefert.

Wenn nicht, dann das Jahr um eins erhöhen und erneut suchen und prüfen.

Dann müsste ich die Suche aber bei jeder db machen.
Möglicherweise gibt es abe eine elegantere Lösung, die zur nächsten db geht, wenn festgestellt wird, daß die db keine Dokumente des gesuchten Jahrgangs enthält.

 
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Ältestes Dokument in DB ermitteln
« Antwort #1 am: 19.04.08 - 12:01:37 »
Hmm, kann es sein, daß db.search die col in der Reihenfolge befüllt, wie die Dokumente erstellt wurden? Also aufsteigend nach Datum sortiert?
Zumindest sieht das bei meinen versuchen mit unterschiedlichen Maildatenbanken so aus.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Ältestes Dokument in DB ermitteln
« Antwort #2 am: 19.04.08 - 12:30:23 »
wenn dem wirklich so ist, dann lässt sich das Jahr, in dem das erste Dokument in der MailDB erstellt wurde mit folgenden Code bestimmen:

Code
Sub Initialize
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim col As NotesDocumentCollection
	Dim doc As NotesDocument
	Dim dt As Variant
	
	Set db = session.CurrentDatabase
	Set col = db.Search( {@Contains(@UpperCase(Form);"MEMO":"REPLY")}, Nothing,0)
	
	If col.Count > 0 Then
		Set doc = col.GetFirstDocument
		dt = Evaluate ( {@Year(@If(DeliveredDate != ""; DeliveredDate; PostedDate != ""; PostedDate; @Created))}, doc )
		Print dt(0)
	End If
End Sub
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline guesswho

  • Senior Mitglied
  • ****
  • Beiträge: 291
Re: Ältestes Dokument in DB ermitteln
« Antwort #3 am: 19.04.08 - 12:34:27 »
Hallo Ulrich,

du und ich sind wohl die einzigen, die hier noch arbeiten  ;D

Ja, ich bin mir auch ziemlich sicher, dass die Col in der Art sortiert wird. Nach mehreren Versuchen mit immer diesem Ergebnis hab ich das damals aber nicht mehr weiterverfolgt, weil ich genau das eben NICHT wollte...   >:(

Jo
5 Server 9.x auf W2K3/W2K8
ca. 550 Clients: 9.x auf Win7
Notes Traveler
iQ.Suite
BCC Charon 4
panagenda Marvel Client
BES 10/12 und viele Blackberrys
paar iPad und iPhones
Teamstudio

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Ältestes Dokument in DB ermitteln
« Antwort #4 am: 19.04.08 - 12:35:22 »
Das ist in jeder Ansicht die du erstellst so.

Wenn du innerhalb eines Sortierkriteriums einer Ansicht gleichwertige Dokumente hast und keine weitere Sortierung mehr vorliegt, dann werden dieses Dokumente nach Anlagedatum (älteste zuerst) sortiert angezeigt.

Da der db.search ja nichts anderes als ein temporärer View Index ist muss er der gleichen Logik gehorchen.

Interessant wäre es herauszufinden ob das Anlagedatum des Dokumentes in zwei Repliken die nur sporadisch miteinander kommunizieren gleich ist.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Ältestes Dokument in DB ermitteln
« Antwort #5 am: 19.04.08 - 13:04:09 »
Zitat
du und ich sind wohl die einzigen, die hier noch arbeiten
Ich mache das momentan nicht ganz freiwillig. Irgendwie geht mir die Archivierung nicht aus dem Kopf. Bis Mittwoch brauche ich ein paar konkrete Zahlen, um die Jobs entsprechend zu konfigurieren.
Leider kann ich da von den beteiligten Consultants nicht viel fachliche Unterstützung erwarten. Sind halt Consultants und haben vom richtigen Leben keine Ahnung.
Ausserdem wollen die für jeden Pups auch noch Kohle sehen. ( "Steht so nicht im Pflichtenheft, Haben Sie so nie geordert" ) . Die ganze Palette die diese Zunft so an BlahBlah ablässt.
Und die zu fragen, ob die denn schon mal in einem anderen Projekt die Mengen an Daten, die bei einer initialen Archivierung ermittelt haben,über den Draht gehen, würde wahrscheinlich deren Horizont übersteigen. Da machen die dann wieder ein projekt mit 20 Mannjahren draus.

Also muss ich wieder selber ran ...
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Ältestes Dokument in DB ermitteln
« Antwort #6 am: 19.04.08 - 13:43:25 »
In Collections und Ansichten werden Dokumente nur mittelbar nach dem Erstellungsdatum sortiert, korrekt ist: Sie werden nach der NoteID einsortiert.

Das heisst u.a. folgendes:
- Die Collection wird in jeder Replik andere Ergebnisse liefern - es zählt ja der Zeitpunkt der Einlieferung in *dieser* DB, welche NoteID zugeordnet wird.
- Wenn jemand lokal am 31.12.1999 ein Dokument erstellt und erst am 03.01.2000 reoliziert, jedoch am 02.01.2000 auf dem Server ein Dokument erstellt hat, dann wird das 1999er Dokument *nach* dem vom 02.01.2000 einsortiert.

Das Verfahren mit der Collection ist also "unscharf", könnte aber für Deine Zwecke ausreichend sein.

HTH,
Bernhard

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Ältestes Dokument in DB ermitteln
« Antwort #7 am: 19.04.08 - 14:00:29 »
Ich werde das jetzt pro Datenbank in umgekehrter Reihenfolge machen. Ausgehend von 2008 gehe ich dann weiter in der Zeit zurück, bis der col.count = 0. Dann weiter zur nächsten DB.

Ich brauche eh die Daten aller Jahrgänge. Das ganze Zahlenzeugs dann in eine db und schwupps kann ich da schöne bunte Bilder zaubern.


Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Ältestes Dokument in DB ermitteln
« Antwort #8 am: 19.04.08 - 14:53:56 »
So, 45 Minuten und 40 Zeilen Code später habe ich jetzt soweit alles, was ich brauche:

Code
Sub Initialize
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim col As NotesDocumentCollection
	Dim doc As NotesDocument
	Dim dt As Variant
	Dim intDocs As Integer
	Dim dblLenght As Double
	Dim strYear As String
	Dim varRes As Variant
	Dim dblSize As Double
	Dim intAtt As Integer
	
	Set db = session.CurrentDatabase
	Set col = db.Search ( MACRO_HAS_ATTACHMENTS , Nothing,0)
	
	If col.Count > 0 Then
		intDocs = 0
		dblSize = 0
		intAtt = 0
		Set doc = col.GetFirstDocument
		dt = Evaluate (MACRO_THE_YEAR, doc )
		strYear = dt(0)
		While ( Not doc Is Nothing )
			
			dt = Evaluate ( MACRO_THE_YEAR, doc )
			
			If (Not strYear  = dt(0) ) Then
				Print strYear	 & " Docs: " & Cstr (intDocs) & " Size: " & Cstr(dblSize) & " Count: " & Cstr(intAtt)
				strYear = dt(0)
				intDocs = 0
				dblSize = 0
				intAtt = 0
			End If
			
			varRes = Evaluate ( {@Sum(@AttachmentLengths)}, doc )
			dblSize = dblSize + varRes(0)
			varRes = Evaluate ( {@Attachments}, doc )
			intAtt = intAtt + varRes(0)		
			intDocs = intDocs +1
			Set doc = col.GetNextDocument (doc)
		Wend
	End If
End Sub

Der Code wirft mir die Anzahl der Documente, die Anhänge enthalten pro Jahr aus. Dabei wird die Anzahl der Attachments ermittelt und die  Länge der Attachments summiert.


Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Ältestes Dokument in DB ermitteln
« Antwort #9 am: 19.04.08 - 15:22:56 »
Na, so ganz zuverlässig ist das noch nicht. Habe es gerade mal auf einer Datenbank mit kanpp 10GB getestet. Die Laufzeit ist OK; knapp 5 Sekunden. Aber bei den ganz alten Docs scheint die Sortierung in der col ein wenig durcheinandergeraten zu sein.
Gut, dann bauen wir das noch ein wenig um, damit die Docs in den richtigen Jahrgang einsortiert werden.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Ältestes Dokument in DB ermitteln
« Antwort #10 am: 19.04.08 - 15:44:18 »
Aber bei den ganz alten Docs scheint die Sortierung in der col ein wenig durcheinandergeraten zu sein.

Sach ich doch  ;) Die DB braucht ja nur mal umkopiert worden zu sein oder es wurde eine Repli kerzeugt und das "Original" in die Tonne geklopft - schon hast Du lauter niegelnagelneue NoteIDs, die ganz anders sortiert sind. Und das Kopier- und Replizierverfahren hat ja in den letzten Jahren auch deutliche Veränderungen erfahren - eine mit R7 oder höher erzeugte neue Replik würfelt Dir die Beziehung zwischen NoteID und Erstellungsdatum so nahezu komplett durcheinander ("Replizierung der Grösse nach" sage ich nur ...).

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz