Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: skywook am 26.09.08 - 21:40:28
-
Hallo,
wie kann ich doppelte Werte aus einer Dokument-Collection löschen? z.B. wenn es mehrere Dokumente mit dem gleichen Namen gibt.
-
Suchst du nach notesDocument.Removeitem (du sprichst von "Werten") oder nach notesDocumentCollection.DeleteDocument( document ) ?
Gruß
Norbert
-
Hallo,
man könnte eine Liste erstellen:
(Auszug aus der Hilfe)
' Make string comparison case insensitive
' in this module.
Option Compare NoCase
' Declare a list—myList—to hold first names.
' The list tags will be unique IDs.
Dim myList List As String
Dim newTag As String
Dim newValue As String
' Put some elements in the list.
myList("A1234") = "Andrea"
myList("A2345") = "Vera"
myList("A3456") = "Isabel"
Als Listtag - hier "A1234" - den möglichen doppelten Wert verwenden. Und als Zuweisung z.B. die Dokumentenuniversal ID.
In einer Liste müssen die Listtags eindeutig sein. D.h. man kann diese Konstruktion ganz gut zur Vereinzelung von doppelten Werten verwenden.
Gruß
-
das Problem liegt darin:
ich suche mit DocumentByKey in einer Ansicht z. B. nach "Mustermann". In der Collection kann "Mustermann" aber mehrmals vorkommen.
Die Collection verschiebe ich in einen Ordner. Aber darin soll der Mustermann nur einmal vorkommen.
Gibt es hierfür ein Lösung? Wo kann ich die doppelten Werte löschen in der Collection oder im Ordner?
-
Wo kann ich die doppelten Werte löschen in der Collection oder im Ordner?
Ich würde das in der Collection machen.
Mal so ins Blaue gedacht, könnte ich mir folgenden Weg vorstellen:
1. Suche mit DocumentByKey
2. Erzeugen einer leeren zweiten Collection
3. Zugriff auf erstes Dokument der ersten Collection
4. Name in eine Liste aufnehmen
5. Prüfen ob Name bereits in der Liste vorhanden ist. Wenn nein,Dokument in die zweite Collection einfügen
6. Nächstes Dokument aus ersten Collection
7. Alle Dokument aus der zwieten Collection in Ordner einfügen.
Schritte 4-6 ausführen bis alle Dokumente in der ersten Collection abgearbeitet wurden.
Ist nur mal so 'ne Idee. Ich bin mir nicht sicher, ob das so praktikabel ist.
Axel
-
Wie schon erwähnt erstellst Du eine Liste. Als ListTag nimmst Du einfach den Key "Mustermann" damit wird die Liste Unique.
Dann gehst Du nochmal durch die Liste greifst Dir über den Key wieder ein Dokument, verschiebst das in den Ordner und fertig.
Boris
-
ich suche mit DocumentByKey in einer Ansicht z. B. nach "Mustermann". In der Collection kann "Mustermann" aber mehrmals vorkommen.
Die Collection verschiebe ich in einen Ordner. Aber darin soll der Mustermann nur einmal vorkommen.
Gibt es hierfür ein Lösung? Wo kann ich die doppelten Werte löschen in der Collection oder im Ordner?
Axels und Boris Lösung funktioniert, nur kann ich keinen Sinn hinter dieser Aktion erkennen. Du nimmst damit ein x-beliebiges Dokument aus deiner Collection nur weil es zufälligerweise gerade an der ersten Stelle steckt und steckst genau dieses Dokument mit zig anderen zusammen in einen Ordner. Ist das denn überhaupt das richtige Dokument? Kann es nicht sein das dein Benutzer im Ordner jetzt ein ganz anderes Dokument erwartet?
-
Danke Euch für die Anworten.
Ich würde es gerne mit einer Textliste lösen (denke das ist ein guter Ansatzpunkt). Aber finde keine genaue Erklärung wie so eine Liste aufgebaut bzw funktioniert. In Best Practices wurde zwar mal darüber diskutiert aber es nie genau erklärt.
Für eine Erklärung wäre ich sehr dankbar.
-
Schon mal die Designer-Hilfe zu dem Thema befragt?
-
Du kannst das einfach in einem dynamischen Array speichern. List benötigst du imho nicht. Der Name ist sowieso irreführend. List enthält key-value Paare, dir gehts aber einfach nur um eine LISTE ohne Duplikate. Das läßt sich prima in einem array speichern. Vor dem Einfügen überprüfst du einfach in deinem Code, ob sich ein Dokument mit der DocUnid des einzufügenden Dokuments bereits in dem Array befindet.
Das wär vielleicht mal ein Fall für Klassen. Eine Implementierung von unterschiedlichen Collection wie im Java Collection Framework.
Möglicherweise hat sich Peter Presnell (http://www.openntf.org/Projects/pmt.nsf/ProjectView?ReadForm&CollapseView&Query=.Domino%20Framework~Releases) darum gekümmert.
Set -> ungeordnete Liste, keine Duplikate
List -> geordnet nach Einfügung, mit Duplikate
Bag -> ungeordnet, Duplikate
TreeSet -> sortiert nach dem natürlichen Key der eingefügten Elemente
Stack -> keine Zeit das jetzt zu erklären
Queue -> keine Zeit das jetzt zu erklären
Wär mal interessant zu sehen, wie weit man mit den Mitteln von LotusScript da wirklich kommt. Viele dieser Dinge sind ja in Java implementiert und den Source Code kann man sich ja, wenn man da ganz viel Zeit investiert, auch anschauen.
-
Vor dem Einfügen überprüfst du einfach in deinem Code, ob sich ein Dokument mit der DocUnid des einzufügenden Dokuments bereits in dem Array befindet.
oder du übernimmst alles und haust dann mit ArrayUnique ( siehe Designer help ) die Duplikate raus