Autor Thema: DocumentCollection in Folder verschieben geht und mal geht's nicht  (Gelesen 3001 mal)

Offline maxritti

  • Senior Mitglied
  • ****
  • Beiträge: 490
Hallo zusammen,

derzeit stehe ich ein wenig auf Kriegsfuss mit einer Suche welche zwischenzeitlich dank Bernhards Hilfe wunderbar funktioniert (http://atnotes.de/index.php/topic,59051.0.html).
Nun geht es noch um die Darstellung der gefundenen Dokument.

In der DB Existieren ich mehrere Ansichten, deren Namen mit "Personen" beginnen. Eine flache und welche, wo ich Kontakte nach unterschiedlichen Kriterien kategorisiere.
Nun erstelle ich mir bzw der Benutzer eine individuelle Suche zusammen. Er startet eine Suche und kann dann neue Kriterien hinzufügen oder aber Kontakte aus der Suche entfernen lassen. Am Ende entsteht mit einer DB.Search eine DocumentCollection, welche ich derzeit in einen Ordner, welcher bei der ersten Benutzung privat wird, verschoben wird, damit der Benutzer nur diese sieht.
Diese Ordner heissen genauso wie die Ansicht, haben aber noch ein "SearchResults" vorangestellt.

Das kuriose an der ganze Geschichte ist nun, dass in der flachen Ansicht alles wunderbar funktioniert.
Der Benutzer wählt eine initiale Suche, die Dokumente gehen in den Ordner und der Ordner wird geöffnet.
Er sagt nun, dass beispielsweise die Kontakte mit dem Attribut "1. Kinofilme 2015\Das A-Team\Abgesagt" nicht mehr mit angezeigt werden sollen und das Dokument des Kontaktes "Benutzer, Test" wird auch nicht mehr in dem Ordner angezeigt. Denn via Code mache ich den Ordner erst mal leer, bevor ich die neue Ergebnismenge dort rein schiebe.

Nun klappt aber genau die gleiche Suche nicht, wenn ich ausgehend von der Kategorisieren Ansicht "Personen\Nach Kategorie" suche.
Es wird ebenfalls die korrekte Menge an Ergebnisdokumenten ermittelt, aber die in der ersten Suche entstandenen Kontakte werde einfach nicht aus dem Ordner entfernt. Und ich verstehe nicht wirklich warum.

Ich habe in jedem Ordner als erste Spalte eine versteckte Spalte, welche den Wert "1" beinhaltet.
Damit kann ich dann im Code mittels View.GetAllDocumentsByKey("1", true) die enthaltenen Dokument holen und removen. So dachte ich.

Hat dazu jemand eine Idee warum er dort keine Dokumente findet, wenn ich aus der kategorisieren Ansicht suche?
Das sieht man im Log um 07:38:33 mit dem Eintrag "Remove documents (0) from folder: SearchResultsPersonennachKategorie".
Dort sollten eigentlich die 4 Dokumente von 07:38:27 drin stehe, welche mit "Move 4 document(s) to folder SearchResultsPersonennachKategorie" dort rein geschoeben wurden und dem Benutzer dargestellt wurden.

Diese Beispieldokumente habe ich derzeit in der DB:



Und kategorisiert sehen diese so aus:



Und hier mal das Log der Suche aus der flachen Ansicht und aus der kategorisierten Ansicht.
Den Unterschied habe ich mal rot markiert.



Hier mal der Code, welcher für die Suche zuständig ist, den Ordner bereinigt, die Dokumente verschiebt und den neuen Folder öffnet.

Code
If strSearch <> "" Then
			
	' Formel für die Suche wurde ermittelt, wird gespeichert
	
	Call noteRecherche.Replaceitemvalue("Search", strSearch)
	Call noteRecherche.save(True, False)
			
	Print Time() & " " & strSearch

	' Und suchen...
	
	Set doccol = dbCur.search(Replace(strSearch, "\", "\\"), Nothing, 0)
			
	' Darstellung der Ergebnismenge in einem Folder
						
	Set uiview = uiws.Currentview
			
	strSrcView = uiview.Viewname
				
	If LCase(Left(uiview.Viewname, 12)) = "searchresult" Then
		strUIView = uiview.Viewname
	Else
		strUIView = "SearchResults" & uiview.Viewname
	End If
	
	If strSrcView <> strUIView Then
		Call uidb.Openview(strUIView)
		Call uiview.Close()
	End If
				
	Set viewFolder = dbCur.Getview(strUIView)
	If viewFolder.Isprivate Then
		Print time() & " " & strUIView & " - private"
		Set doccolTemp = uiview.view.Getalldocumentsbykey("1", true)
		Call doccolTemp.Removeallfromfolder(strSrcView)
		Print Time() & " Remove documents (" & cstr(doccolTemp.count) & ") from folder: " & strUIView
		Print Time() & " Move " & CStr(doccol.count) & " document(s) to folder: " & strUIView
		Call doccol.Putallinfolder(strUIView, false)	
	End If

End if

Hier die Darstellung nach der Suche aus der flachen Ansicht:



und hier das Ergebnis nach der Suche aus der kategorisierten Ansicht.
Da müsste eigentlich "Benutzer, Test" entfernt worden sein.




Ich hoffe, dass das was ich vorhabe einigermassen verständlich ist und auch das Problem anhand des Log zu sehen ist.
Wenn nicht, bitte einfach melden.

Denn wie gesagt, derzeit ist mir das nicht klar, warum das in einer Ansicht geht und aus der/den anderen Ansicht(en) nicht.
« Letzte Änderung: 01.06.15 - 08:07:10 von maxritti »

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Ganz hab ich das Problem noch nicht verstanden, die Debug-Ausgabr passt aber nicht zum Code.

Call doccolTemp.Removeallfromfolder(strSrcView)
Print Time() & " Remove documents (" & cstr(doccolTemp.count) & ") from folder: " & strUIView

Du entfernst aus StrSrcView,  printest aber strUIView.

Vermutlich liefert aber einfach folgende Zeile keine Dokumente: uiview.view.Getalldocumentsbykey("1", true)

Ein uiview.view.refresh() könnte das beheben

Gruß Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Also erstmal: Wenn man in einer kategorisierten Ansicht nach einer sortierten Spalte sucht, dann kriegt man kein Ergebnis zurück, das ist einfach so.
Es kann ausserdem -je nach Aufbau der Ansicht- sein, dass Du, wenn Du im obigen Beispiel "1. Kinofilme 2015" suchst, nur einen Eintrag (Casino Royal) zurückbekommst.

Da Du ALLES aus dem Ordner entfernen willst, kannst Du mit NotesView.Allentries eine NotesViewEntryCollection bauen, diese hat ebenfalls eine Methode "RemoveAllFromFolder".
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline maxritti

  • Senior Mitglied
  • ****
  • Beiträge: 490
Ich versuche es noch mal zu verdeutlichen.

In der DB existieren u.a. die Ansichten wie sie in den ersten beiden Bildern zu sehen sind.

Zusätzlich gibt es Ordner, die "SearchResultsPersonen" und "SearchResultsPersonennachKategorie" lauten.
Bei diesen Ordnern existiert als erste sortierte Spalte einfach eine Formel "1", damit ich alle Dokumente aus dem Ordner entfernen kann.
Damit sollte doch die weitere kategorisierte Spalte erst mal keine Rolle spielen oder?

Nun sucht der Benutzer erst mal nach "1. Kinofilme 2015\Das A-Team" dadurch erstelle ich im Script die Formel

@IsMember("1. Kinofilme 2015\Das A-Team"; Categories")

und schiebe die Dokumente in den Ordner.
Soweit alles gut. Dann sagt er, dass er die Benutzer mit "1. Kinofilme 2015\Das A-Team\Abgesagt" und "1. Kinofilme 2015\Das A-Team\Zugesagt" nicht mehr haben möchte.
Da wird dann die Suchformel draus:

(@IsMember("1. Kinofilme 2015\Das A-Team"; Categories")) & (!@IsMember("1. Kinofilme 2015\Das A-Team\Abgesagt"; Categories) & !@IsMember("1. Kinofilme 2015\Das A-Team\Zugesagt"; Categories))

Im ersten findet er laut Protokoll 4 Dokumente und beim zweiten Lauf 3 Dokumente.

Soweit auch korrekt.
Nur dann verbleibt halt der "Benutzer, Test" in dem Ordner.

Ganz hab ich das Problem noch nicht verstanden, die Debug-Ausgabr passt aber nicht zum Code.

Call doccolTemp.Removeallfromfolder(strSrcView)
Print Time() & " Remove documents (" & cstr(doccolTemp.count) & ") from folder: " & strUIView

Du entfernst aus StrSrcView,  printest aber strUIView.

Vermutlich liefert aber einfach folgende Zeile keine Dokumente: uiview.view.Getalldocumentsbykey("1", true)

Ein uiview.view.refresh() könnte das beheben

Gruß Roland

Mit dem entfernen hast Du recht. Da habe ich mich wohl vertippt.
Aber es ändert sich nichts, auch nicht, wenn ich das uiview.view.refresh hinzufüge.

Also erstmal: Wenn man in einer kategorisierten Ansicht nach einer sortierten Spalte sucht, dann kriegt man kein Ergebnis zurück, das ist einfach so.
Es kann ausserdem -je nach Aufbau der Ansicht- sein, dass Du, wenn Du im obigen Beispiel "1. Kinofilme 2015" suchst, nur einen Eintrag (Casino Royal) zurückbekommst.

Da Du ALLES aus dem Ordner entfernen willst, kannst Du mit NotesView.Allentries eine NotesViewEntryCollection bauen, diese hat ebenfalls eine Methode "RemoveAllFromFolder".

Schau mal bitte oben.
Ich habe ja explizit in jedem Ordner als erste sortierte Spalte einfach eine "1".
MMn sollte die Kategorie dann keine Rolle mehr spielen.

Den Weg mit NotesViewEntryCollection werde ich mir mal anschauen.

Auf jeden Fall schon mal danke für Euer Feedback

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
MMn sollte die Kategorie dann keine Rolle mehr spielen.

Nur leider interessiert LotusScript Deine Meinung nicht...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline maxritti

  • Senior Mitglied
  • ****
  • Beiträge: 490
MMn sollte die Kategorie dann keine Rolle mehr spielen.

Nur leider interessiert LotusScript Deine Meinung nicht...

Da magst Du wohl Recht haben.  :D

Der Tip von Dir mit der ViewEntryCollection passt.
Damit klappt es nun auch in den anderen Ordner.

Danke für den Tip.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz