Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: m3 am 09.03.05 - 15:27:52

Titel: ältestes/neuestes Doc. ohne neuen View
Beitrag von: m3 am 09.03.05 - 15:27:52
Ich brauch fuer einen XML-Export das älteste und das neueste Dokument in einem View. Den View kann ich nicht ändern, neuer View ist nicht und auch die Sortierung kann ich nicht so ändern, dass ich mit GetFirst... und GetLastDocument die entprechenden Docs bekomme.

Zur Zeit fahr ich mit
Code
	Set doc = view.GetFirstDocument
	While Not(doc Is Nothing)
		If(doc.Lastmodified > newest) Then
			newest = doc.Lastmodified
		End If
		If(doc.Lastmodified < oldest And Cstr(doc.Lastmodified) <> "") Then
			oldest = doc.Lastmodified
		End If
		Set doc = view.GetNextDocument(doc)
	Wend
ueber den View, um die ensprechenden Daten zu finden und anschließend nochmals, um das XML zu generieren.

Das kann/muss doch effektiver gehen, oder?
Titel: Re: ältestes/neuestes Doc. ohne neuen View
Beitrag von: koehlerbv am 09.03.05 - 18:38:29
Martin, ich würde mich über jede anderslautende Meinung freuen, die mich dann dazu führt, mich vor den Kopf zu schlagen, aber nach meinem Kenntnisstand: Nein, da gibt es keine andere Möglichkeit als das brutale Durchlaufen aller Dokumente ... Nur das neueste Dokument liesse sich über ein dbSearch mit wahrscheinlichem CutOff-Date schneller finden, aber das älteste ... Leider nein.

Bernhard
Titel: Re: ältestes/neuestes Doc. ohne neuen View
Beitrag von: m3 am 09.03.05 - 22:16:03
Sch....
Ich habs befuerchtet. :(
Titel: Re: ältestes/neuestes Doc. ohne neuen View
Beitrag von: TMC am 09.03.05 - 22:39:46
Unter Deinen Bedingungen sehe ich auch keine Alternative.

und anschließend nochmals, um das XML zu generieren.

Was meinst Du mit "anschließend nochmal"?

Die gefundenen Doks kannst Du doch z.B. in ein Array aus NotesDocuments stecken.

Also:

Dim docArray As Variant
...
If <Deine Bedingung> Then
   docArray(DeinCounter) = doc
End If

Danach arbeitest Du dann das Array aus NotesDocuments (docArray) entsprechend ab.
In meinem Bsp. fehlt noch ein Redim. Wenn Dir vor der Ausführung der Schleife schon die Größe des Arrays bekannt ist, dann kannst Du es entsprechend dimmen, ansonsten musst Du wohl mit Redim Preserve arbeiten, was man halt eigentlich in Schleifen vermeiden sollte aus Performancegründen.
Titel: Re: ältestes/neuestes Doc. ohne neuen View
Beitrag von: m3 am 09.03.05 - 22:46:21
Also das will ich auf einem Server der aus dem letzten Loch pfeift (3 neu Power5 stehen in den Startloechern) eigentlich nicht machen, vor allem, wenn das XML dann 6 MB hat. ;)

Daher fahr ich noch ein zweites Mal ueber alle Dokuemnte und schreib das XML direkt in ein File. Kostet zwar Zeit, aber dafuer frisst es nicht RAM. :)
Titel: Re: ältestes/neuestes Doc. ohne neuen View
Beitrag von: TMC am 09.03.05 - 23:01:42
Na ja, meinst Du das docArray schluckt wirklich soooo viel RAM?
Das enthält doch nicht wirklich die Dokumente, sondern Objekte (NotesDocument).

Oder kämpfst Du um jedes Bit ?
Titel: Re: ältestes/neuestes Doc. ohne neuen View
Beitrag von: m3 am 09.03.05 - 23:03:16
Zweiteres. :)
Titel: Re: ältestes/neuestes Doc. ohne neuen View
Beitrag von: TMC am 09.03.05 - 23:11:28
OK, dann ist das wirklich eine Herausforderung  ;D

Wobei: Ich kann mir bei bestem Willen nicht vorstellen, dass solch ein docArray viele Bits frisst.
Müsste man mal testen (oder nachlesen?), aber mehr als 100 Bytes / Dokument gehen da vermutlich nicht drauf  ::)
Würde es halt schade finden, nochmal eine Schleife zu durchlaufen, wenn man beim 1. Run schon alle Daten hat, die man braucht.
Titel: Re: ältestes/neuestes Doc. ohne neuen View
Beitrag von: m3 am 09.03.05 - 23:29:57
Ich werd mir das morgen mal ansehen. Das interessiert mich jetzt auch.
Titel: Re: ältestes/neuestes Doc. ohne neuen View
Beitrag von: diali am 15.03.05 - 07:53:45
mit einem NotesDatabase.FTSearch() sollte es möglich sein.
Den Query musst Du so formulieren, dass er der Ansichtsauswahl entspricht und mit dem 3. Parameter kannst Du sogar bestimmen, ob Du nach Erstelldatum oder dem Datum der letzen Änderung sortieren willst.

Mit NotesDocumentCollection.GetFirstDocument und NotesDocumentCollection.GetLastDocument hast Du dann das älteste und neuste Dokument.
Titel: Re: ältestes/neuestes Doc. ohne neuen View
Beitrag von: koehlerbv am 15.03.05 - 12:30:51
Das mit created / modified ist aber erst seit R6 möglich. Ausserdem gibt es da noch die Klippe mit der DocumentCollection, die Martin möglichst vermeiden möchte.

Bernhard