seegers
Returning Observer

Templatevergleich, BeanShell, Cache?

Jump to solution

Servus allerseits,

über ein BeanShell Script möchte ich gewisse Eigenschaften von Templates in verschiedenen Projekten vergleichen. Dazu hole ich mir über context.getUserService().getConnection().getProjectByName(pname1).getUserService().getTemplateStore() (und analog für pname2) Zugriff auf die jeweiligen TemplateStores und lade mir mittles getChildren(PageTemplate.class, true) die Elemente für den Vergleich in mein Skript.

Ändere ich in einem Projekt nun Eigenschaften im Template (beispielsweise Inhalte des Ausgabekanals, Elementnamen im Formular, etc) und führe einen erneuten Vergleich über mein Skript durch, dann wird anscheinend nicht immer der neue Stand des bearbeiteten Templates geladen, sondern immer noch der alte Stand verglichen. Das Ergebnis vom Vergleich scheint also mal korrekt sein und dann wieder mal veraltet. Erst nach dem Neustart des Site-Architect, aus dem ich das Skript starte, habe ich den aktuellen Stand der Templates für meinen Vergleich.

Gibt es irgendwo eine Art Caching bei den oben genannten Aufrufen? Wenn ich die Templates in einer Schleife durchlaufe, so braucht der erste Durchlauf auch länger als die nachfolgenden. In der API scheint es für den TemplateStore jedoch keinen Parameter zu geben, mit dem eine Anfrage für die aktuellste Version ausgelöst wird (anders hingegen beim Site-/PageStore).

Hat hiermit jemand schon Erfahrungen gesammelt? Wäre für Fingerzeige, in welche Richtung ich für eine Lösung schauen sollte, dankbar. Smiley Happy

Beste Grüße,

René

Version: FS5.2

0 Kudos
1 Solution

Accepted Solutions
felix_reinhold
Returning Responder

Hallo René,

alle Stores haben die "refresh()" Methode, um den aktuellsten Stand zu holen - Das sollte bereits reichen.

Gleiches funktioniert auf dem Projekt (könntest du also beim Holen  des Projekts ausführen).

Alternativ (falls du nur lesende Operationen ausführst) könntest du dir auch den neuesten UserService holen:

context.getUserService().getConnection().getProjectByName(pname1).getUserService(new Date()).getTemplateStore()

Ich gehe aber wie gesagt davon aus, dass der Refresh auf dem Store genügt.

Gruß

Felix

View solution in original post

0 Kudos
4 Replies
pavone
I'm new here

Hallo René,

ich denke der SiteArchitect cached diese Aufrufe tatsächlich und dass das auch beabsichtigt ist. Ich habe es nicht getestet, aber womöglich kannst du dein Problem umgehen, indem du den Vergleich auf dem FirstSpirit Server (z.B. in einem Service) implementierst.

Wie sieht denn der genau Anwendungsfall aus? Was und warum möchtest du in den Vorlagen vergleichen? Vielleicht gibt es ja noch eine elegantere Lösung.

Viele  Grüße

Tim

0 Kudos
felix_reinhold
Returning Responder

Hallo René,

alle Stores haben die "refresh()" Methode, um den aktuellsten Stand zu holen - Das sollte bereits reichen.

Gleiches funktioniert auf dem Projekt (könntest du also beim Holen  des Projekts ausführen).

Alternativ (falls du nur lesende Operationen ausführst) könntest du dir auch den neuesten UserService holen:

context.getUserService().getConnection().getProjectByName(pname1).getUserService(new Date()).getTemplateStore()

Ich gehe aber wie gesagt davon aus, dass der Refresh auf dem Store genügt.

Gruß

Felix

0 Kudos
seegers
Returning Observer

Moin zusammen,

danke für das Feedback.

@Tim: Zum Anwendungsfall: Wir haben ein Entwicklungsprojekt, in dem alle Templates in einem Paket stecken, welches vom Abnahmeprojekt abonniert ist. Wenn eine Erweiterung / Anpassung getestet und abgenommen wurde, dann wurde die Änderungen manuell übertragen. Manuell, da zum einen ggf. andere Erweiterungen noch in der Entwicklung sind und zum anderen, da leider keine kaskadierenden Paketbeziehungen möglich sind bzw. ein Template immer nur in einem Paket stecken kann. Und manuell ist bekannterweise suboptimal.

Das Skript soll uns helfen, Unterschiede in den Templates zwischen und deren Einstellungen zwischen diesen Projekten zu erkennen und zu minimieren.

Die eigentliche elegante Lösung wäre natürlich eine Möglichkeit, Features wie in Branches bei Versionierungssystemen zu entwickeln und genau diese Änderungen in andere Projekte zu übernehmen. Die Evaluierung des "Content Transport" ist auf unserer ToDo-Liste. Andere Hinweise auf mögliche Lösungswege werden gerne angenommen.

@Felix: Mit dem refresh() funktioniert es nun - Danke. Diese Methode hatte ich bislang übersehen.

Gruß,

René

0 Kudos

Hallo René,

kleiner Tipp - falls ihr das nicht sowieso schon nutzt: Für Textvergleiche sind in dem Zusammenhang vielleicht noch zwei Operations nützlich:

Mit der OpenComparisonDialogOperation kann man "nur" vergleichen, mit der OpenMergeDialogOperation bekommt man sogar eine dreiteilige Merge-Ansicht mit Differenzvisualisierung und Merge-Bereich - dessen "finaler" Inhalt ist dann auch das Ergebnis der Operation, das man dann z.B. zurückschreiben kann.

Viele Grüße

Michael

0 Kudos