JonasE
I'm new here

Externe Datenquellen: Synchronisierung durch Aktualisierung in SiteArchitect

Hallo zusammen,

wir haben zwei verschiedene Projekte für Internet bzw. Intranet. Das Internet-Projekt enthält eine Datenquelle, in der Kontakte gepflegt werden. Das Intranet-Projekt hat ausschließlich einen lesenden Zugriff auf diese Kontakte. Um in der Intranet-Seite Änderungen der Kontakte zu sehen, war bisher das Vorgehen:

1. Sicherstellen, dass aktuelle Inhalte verwendet werden (https://community.e-spirit.com/people/hoebbel/blog/2010/12/03/adventskalender-und-automatisches-umsc...). Dazu verwenden wir den Zweizeiler

context.getProject().createTag("Generation","needed for external database content",null);

context.setStartTime(new Date());

2. Damit wird dann eine Generierung angestoßen

3. Der Suchindex wird erneuert

Heute ist aufgefallen, dass dieser Weg nicht mehr zu funktionieren scheint. Eine Änderung eines Datensatzes im "Master"-Projekt Internet, gefolgt von den oben genannten drei Schritten, führt nicht dazu, dass diese Änderung im ContentCreator des Intranet-Projekts sichtbar ist.

Kurze Nebeninfo zur Infrastruktur: Das Preview-System und der Content-Creator sind ausgelagert und laufen nicht auf dem gleichen Server wie der SiteArchitect (vielleicht spielt das eine Rolle?)

Nun das Kuriosum:

Öffnet man nach der Änderung eines Datensatzes im Internet-Projekt das Intranet-Projekt im SiteArchitect, so ist die Änderung bei initialer Anzeige des Remote-Datensatzes nicht sichtbar. Eine simple Aktualisierung (F5) ändert das. Der Datensatz wird sichtbar (im SiteArchitect) und ist ebenfalls im ContentCreator zu sehen. Die drei oben genannten Schritte fallen sämtlich weg.

Wodurch wird dieses Verhalten verursacht und wie kann man eine Aktualisierung des Remote-Datensatzes ohne den Umweg über den SiteArchitect erreichen?

Viele Grüße

Jonas

0 Kudos
4 Replies
pavone
I'm new here

Hallo Jonas,

sowohl StoreElement als auch Entity besitzen eine refresh() Methode. Ich habe es nicht überprüft, aber ich denke, dass du damit die Aktualisierung im Intranet-Projekt triggern könntest. Ggf. lässt sich so ein Aufruf ja sinnvoll irgendwo einbauen.

Viele Grüße

Tim

0 Kudos

Hallo Tim,

danke für die Antwort. Leider hilft kein Refresh-Aufruf. Weder auf dem contentstore-Objekt, der spezifischen Datenquelle (Tabelle), den Datasets, noch auf der Entity. Das einzige, was bisher die Synchronisierung ausführt, ist ein Klick auf den Refresh-Button im SiteArchitect. Kann man diesen Klick irgendwie ohne den SiteArchitect in einem Script ausführen?

Viele Grüße

Jonas

0 Kudos

Hi Jonas,

der Trick den du beschreibst, der ist nur für eine normale Generierung relevant und sollte dafür auch funktionieren - hier hat sich nichts geändert.

Für die Vorschau allerdings, hat das überhaupt keine Auswirkung. Was in dieser Situation problematisch ist, ist dass externe Datenbanken auf dem FirstSpirit-Server gecacht werden. Das heißt Änderungen an der Datenbank werden erst sichtbar, wenn der Cache invalidiert wird. Dies wird ausgelöst, wenn du im SiteArchitect auf den Refresh-Button drückst.

Wenn du das ganze über die API ausführen willst, gibt es seit der FirstSpirit-Version 5.1.304 funktionierend eine Methode auf dem Schema, mit der du den Refresh auslösen kannst:

 

storeElement = context.getStoreElement(); 

schema = storeElement.getSchema(); 

schema.resetReadTimestamp();

Hilft dir das?

Grüße,

Hannes

0 Kudos

Hallo Hannes,

danke für den Vorschlag. Das ganze Verhalten war scheinbar ein Bug. In unser Integrationsumgebung ist er wie beschrieben aufgetreten, auf anderen Systemen ist er nicht vorgekommen. Der zuvor verwendete Weg, um die Aktualisierung zu erreichen, ist also weiterhin ausreichend.

Das Thema kann geschlossen werden.

Gruß

Jonas

0 Kudos