Hi Folks,
ich grüble gerade über einem Problem. Vielleicht könnt ihr mir helfen.
Aufgabenstellung:
Eine Reihe von Dokumenten soll bearbeitet (exportiert) werden. Welche Dokumente exportiert werden sollen, wird anhand von Feldwerten ermittelt. Das relevante Feld ist ein Feld mit Mehrfachwerten, welches ID Nummern enthält (die ID Nummern beziehen sich nicht auf das Dokument, sondern auf Personen). Ich will beispielsweise alle Dokumente ausgeben, die Person X zugeordnet sind. Person X hat die ID Nummer "12345" und ich will jetzt alle Dokumente ausgeben, welche in dem Feld "IDNummern" die spezielle ID Nummer "12345" enthalten ist.
Der Clou ist, die Dokumente sollen in exakt der Reihenfolge ausgegeben werden, die in der Ansicht, in der die Dokumente herausgesucht werden, vorhanden ist.
Lösungsansätze:
Die Funktion GetAllDocumentsByKey ist problematisch, da diese eine DocumentCollection zurückliefert, in welcher die Dokumente aber *nicht* in der Reihenfolge enthalten sind, welche sie in der entsprechenden Ansicht haben.
Mein Ansatz ist nun, dass ich GetDocumentByKey verwende, um das erste Dokument zu ermitteln und dann mittels GetNextDocument schrittweise die folgenden Dokumente durchlaufe. Hierbei wird in der entsprechenden Ansicht in der ersten Spalte das Feld "IDNummern" aufsteigend sortiert angezeigt, wobei Mehrfachwerte getrennt angezeigt werden.
Probleme:
Die Funktion GetNextDocument prüft natürlich nicht mehr die Bedingung, mit der das erste Dokument per GetDocumentByKey gefunden wurde. Ich muss also im Code berücksichtigen, dass die Urspungsbedingung (enthält das Feld "IDNummern" die Nummer "12345") erfüllt ist. Das Problem hierbei ist, dass das Feld "IDNummern" Mehrfachwerte zulässt (und zulassen *muss*). So kann es passieren, dass - nachdem alle Dokumente ermittelt wurden, indem die erste Spalte der Ansicht, Mehrfachwerte getrennt, ausgewertet wurde - das nächste Dokument zwar nicht mehr die Suchbedingung erfüllen würde, wenn man GetAllDocumentsByKey verwenden würde, aber dennoch im Feld "IDNummern" die zu suchende ID enthält. Ein Dokument darf/soll aber nicht doppelt bearbeitet werden.
Für die Kombination GetDocumentByKey und GetNextDocument muss ich also eine gesonderte Abbruchbedingung definieren. Hierzu habe ich spontan zwei Ideen:
1. In einem versteckten Feld ein Flag "bearbeitet" setzen - das ist deswegen problematisch, weil zwei Suchanfragen zeitnah hintereinander abgesetzt unterschiedliche Ergebnisse bringen könnten; zweimal dieselbe Suche bringt beim zweiten mal keine Ergebnisse mehr (die Dokumente stehen bereits auf "bearbeitet")
2. Im Skript selber merke ich mir anhand der DocIDs oder UNIDs, welche Dokumente bereits bearbeitet wurden. Treffe ich auf ein bereits bearbeitetes Dokument, ist dies eine Abbruchbedingung.
Ich hoffe, ich habe mich überhaupt verständlich ausgedrück. Falls nicht: fragen!
Habt ihr Ideen/Anmerkungen dazu? Vielleicht eine komplett andere Vorgehensweise?
Viele Grüße
Harry