Domino 9 und frühere Versionen > ND8: Entwicklung
Vorgehensweise Dokumente synchronisieren
schroederk:
Hallo,
ich würde mich gerne an ein für mich noch recht neues Thema heranwagen und Dokumente in Ansichten zwischen zwei Datenbanken synchronisieren.
Also herausfinden, ob Dokumente neu, geändert oder gelöscht.
Jedes Dokument in einer Ansicht in der Source-DB durchzugehen und zu prüfen ob es in der Target-DB zu finden ist und wenn, welches letzte Änderungsdatum es hat, halte ich noch für meine Verhältnisse gut realisierbar.
Aber wie sieht es mit gelöschten Einträgen aus?
Und ist es überhaupt ein guter Ansatz durch alle Dokumente in der Source-DB durchzugehen?
Muss dann nicht dasselbe nochmal mit vertauschten Rollen (also Target-DB gleich Source-DB und umgekehrt) durchgegangen werden?
eknori:
Guckst Du http://www.eknori.de/2005-09-03/adressbucher-konsolidieren/
schroederk:
Vielen Dank für den Link, aber auch auf die Gefahr hin, das Rad zweimal zu erfinden, hilft es mir sicherlich den Prozess und die Vorgehensweise zu verstehen, wenn ich es doch selber programmieren möchte.
Das kann dieses fertige Tool (was einem ersten Blick nach auch komplexer ist) kaum leisten.
Ich habe auch nicht vor ein Field-Mapping einzubauen oder den Sync auf andere Art und Weise komplizierter zu machen.
Wenn es die Sach deutlich vereinfacht, bin ich auch mit einem One-Way-Sync einverstanden, der aber nicht (das wäre die einfachste Form) erst alle Dokumente im Ziel löscht und dann alle Dokumente aus Quelle nach Ziel kopiert.
Wie finde ich heraus, welche Dokumente nach der letzten Synchronisation gelöscht wurden? Muss ich mich hier über "Deletion Stubs" einlesen?
Peter Klett:
Ich mache sowas über Listen. Angenommen, Du willst nur die Dokumente aus der einen Datenbank in die andere übertragen (also One-Way), dazu hier ein sinngemäßer Auszug:
Dim zielcol As NotesDocumentCollection
Set zielcol = zieldb.Search (alle relevanten Dokumente der ZielDB)
Dim zieldoks List As Integer
Alle Dokumente (zieldoc) aus zielcol durchgehen
zieldoks (zieldoc.UniversalID) = 1
Beim Abgleich nehme ich dann alle relevanten Dokumente aus der QuellDB und lösche beim Abgleich die DokID aus der Zielliste
If IsElement (zieldoks (quelldoc.UniversalID)) Then
'Dokument abgleichen
Erase zieldoks (quelldoc.UniversalID)
Else
'Dokument in Ziel neu erstellen
End If
Zum Schluss verbleiben in der Liste alle Dokumente der ZielDB, die nicht mehr in der QuellDB enthalten sind, die lösche ich dann
Forall dok in doks
Set zieldoc= zieldb.GetDocumentByUnid (Listtag (dok))
'zieldoc löschen
End Forall
Voraussetzung meiner Darstellung ist, dass Quell- und Zieldokumente die gleiche DokumentID (UniversalID) besitzen (die kann beim Erstellen des Dokuments VORM SPEICHERN gesetzt werden (-> zieldoc.UniversalID = quelldoc.UniversalID)), ansonsten benötigst Du einen anderen eindeutigen Schlüssel.
schroederk:
Vielen Dank. Deinen Ansatz habe ich verstanden. :)
Datu noch ein paar Fragen...
Wie findest Du hier damit neue Einträge in der Quell-DB?
Einträge die mit
--- Zitat ---Call dbQuelldoc.CopyToDatabase(dbZiel)
--- Ende Zitat ---
kopiert werden, haben doch die gleiche UniversalID oder?
So zumindest hatte ich vor, neue Dokumente von Quelle nach Ziel zu übertragen.
Wie gleichst Du die Dokumente ab? Löschen und Neuanlegen (oben genanntes Copy)?
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln