Search the FirstSpirit Knowledge Base
Es ist möglich, ein internes FirstSpirit Datenbankschema in mehreren Projekten zu nutzen.
Wie dies zu konfigurieren ist, wird ausführlich in dem FirstSpirit Blog Eintrag Connecting read-only Databases in a Multisite Scenario beschrieben.
Dieser Artikel geht auf die daraus resultierenden möglichen Probleme ein, die sich bei der Nutzung ergeben können.
Um dies zu verstehen ist es wichtig, dass man weiß, dass FirstSpirit bei einer Generierung immer den Zeitpunkt des Generierungsstarts berücksichtigt. Somit haben Änderungen am Projekt, die, während die Generierung ausgeführt wird, durchgeführt werden, keinerlei Auswirkungen auf die Generierung.
Weiterhin ist es möglich historische Generierungen durchzuführen (also von einem beliebigen Zeitpunkt in der Vergangenheit).
Um Beides zu gewährleisten setzt FirstSpirit den Startzeitpunkt einer Generierung immer auf den Zeitpunkt der letzten Änderung im Projekt, die vor dem definierten Zeitpunkt der Generierung durchgeführt wurde. Eine Änderung wiederum ist unter anderem jede Speicheroperation im Projekt, egal ob ein Datensatz geändert wird oder für einen Absatz ein Kommentar erfasst wird.
Bei lesend angebundenen Datenbanken werden die Änderungen an den Datensätzen aber in einem anderen Projekt durchgeführt. Solange in dem jeweiligen Projekt danach keine lokale Änderung durchgeführt wird, ist die Änderung an dem entsprechenden Datensatz (oder auch ein neuer Datensatz) für die entsprechende Generierung nicht gültig, auch wenn der entsprechende Datensatz als freigegeben im Projekt sichtbar ist.
Beispiel:
Lösung:Sorgen Sie dafür, dass die Generierung einen Stand veröffentlicht, der “jetzt” gültig ist. Dazu gehen Sie folgendermaßen vor:
context.getProject().createTag("Generation","needed for external database content",null);
context.setStartTime(new Date());
Die erste Zeile fügt dem Projekt einen Tag hinzu (mit dem Namen “Generation” und dem Kommentar "needed for external database content"). Dies ist eine Änderung, so dass Aufträge, die nach diesem Zeitpunkt starten, diesen Moment als letzte Ändeurng erkennen würden.
Leider ist der entsprechende Auftrag bereits gestartet, so das wir mit der zweiten Zeile FirstSpirit dazu bringen, den Startzeitpunkt dieses Auftrags neu zu berechnen (ausgehend von dem Zeitpunkt der Ausführung dieser zweiten Zeile, der einige Millisekunden nach dem Setzen des Tags liegt), so dass das Projekt nun auch kürzlich in dem Quellprojekt geänderte Datensätze berücksichtigt.
Der ContentCreator arbeitet suchzentriert und nutzt daher den Suchindex. Alle Elemente von FirstSpirit werden indiziert und in den Index aufgenommen. Sobald eine Änderung erfolgt, wird diese Änderung sofort neu indiziert und der Index aktualisiert, so dass die geänderten Informationen umgehend im Suchindex des entsprechenden Projektes zur Verfügung stehen.
Bei lesend angebundenen Datenbanken erfolgt die Änderung aber im Quellprojekt, so dass der Suchindex der Projekte, die die Datenbank lesend anbinden, die Änderungen nicht enthält, so dass diese weder gesucht noch im Content Creator genutzt werden können.
Lösung:
Es muss dafür gesorgt werden, dass jede Änderung an einem Datensatz im Quellprojekt dazu führt, dass der entsprechende Datensatz in allen Projekten, die die Datenbank lesend anbinden, neu indexiert wird. Dies kann entweder über einen Store Listener geschehen, der entsprechende Änderungen im Quellprojekt erkennt und dann die Indexierung in den anderen Projekten triggert, oder, wenn beispielweise nur freigegbeen Datensätez gefunden werden sollen, über den Freigabeworkflow, in dem ein entsprechendes Skript eingebunden wird.
Implementierungshinweis:
connection.adminService.projectStorage.rebuildSearchIndex(dataset);
Auch dieses Problem ersteht dadurch, dass FirstSpirit beim Speichern interne Prozesse automatisch startet an der Stelle, an der die Änderung durchgeführt wird. Sobald eine Referenz gesetzt, geändert oder entfernt wird, so wird der Referenzgraph des entsprechenden Projektes aktualisiert.
Da dies nicht in den Projekten geschieht, die die Datenquelle lesend angebunden haben, muss dies manuell erfolgen. Hierbei kann die selbe Funktionalität verwendet werden wie bei der Aktualisierung des Suchindexes, wobei diesmal diese Funktionalität genutzt werden muss:
Implementierungshinweis (Verfügbar seit 5.2.309)
projRefAgent = context.requireSpecialist(ProjectReferencesAgent.TYPE);
projRefAgent.rebuildReferences(dataset);
Subject | Latest Article | |
---|---|---|