Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich importiere Daten aus XML-Dateien in eine Datenquelle, das funktioniert auch prima.
Allerdings bekomme ich die Datenquelle nach erfolgreichem Import nicht aktualisiert, ich möchte quasi das manuelle F5 drücken simulieren.
Am Ende des Skripts lasse ich mir die Anzahl der Datensätze ausgeben, dort bekomme ich immer 0 zurück.
Wenn ich die Datenquelle manuell per F5 aktualisiere und das Skript anschließend nochmal laufen lasse, dann bekomme ich wie erwartet 292 ausgegeben.
//! Beanshell
import javax.swing.JOptionPane;
import de.espirit.firstspirit.access.store.Store;
import de.espirit.firstspirit.access.store.IDProvider;
// Methods in Beanshell Scripts
showInfo(String message) {
JOptionPane.showMessageDialog(null, message, "", JOptionPane.INFORMATION_MESSAGE);
}
// Storelement holen (e ist nur auf Beanshell verfügbar)
project = context.getProject();
lang = project.getMasterLanguage();
us = project.getUserService();
store = us.getStore(Store.Type.CONTENTSTORE, true, true);
db = store.getStoreElement("datenquelle", IDProvider.UidType.CONTENTSTORE);
dataList = db.getData(lang);
showInfo(dataList.size()+"");
Eventuell hilft hier schon ein db.refresh()?
Stefan.
Anstelle von:
store = us.getStore(Store.Type.CONTENTSTORE, true, true);
db = store.getStoreElement("datenquelle", IDProvider.UidType.CONTENTSTORE);
hatte ich auch schon folgendes ausprobiert, leider ohne Erfolg:
store = us.getStore(Store.Type.CONTENTSTORE, false);
db = store.getStoreElement("datenquelle", IDProvider.UidType.CONTENTSTORE);
db.refresh();
Hallo Herr Wehe,
von welcher Stelle aus rufen Sie die Codezeilen auf? Mit welcher FirstSpirit Version arbeiten Sie aktuell?
Ich habe die Codezeilen in einem Skript stehen, das ich über das Menü aufrufe.
Wir benutzen firstSpirit 4.2.454.47473
Hallo,
bisher verwende ich bei Datenquellen immer den TEMPLATESTORE.
Event. hilft es auch vor der Abfrage noch ein
context.setStartTime(new Date());
zu setzen. (Das hat mal bei der Auftragssausführung geholfen).
Grüße Andreas
Leider ist es mir auch über den TEMPLATESTORE nicht gelungen die Datenquelle zu aktualisieren.
Hat noch jemand einen Tipp für mich?
Es gibt keinen API-Weg um die Gui (Datenquelle) zu aktualisieren. Ich sehe die Notwendigkeit aber auch nicht. Datenimporte sollten doch sinnvollerweise ohnehin auf dem Server (Auftragsverwaltung) durchgeführt werden und nicht aus dem JavaClient heraus. Ein nach dem Import neugestarter JavaClient hat dann auch alle Daten die importiert wurden. JavaClients die während des Importes offen sind, bekommen die Daten erst nach einem manuellen Refresh, sofern sie die entsprechenden Sichten (Datenquellen) im Client vorher schon angezeigt haben. Das ist aber doch auch korrekt.
Wenn es nur um die Ausgabe der Anzahl des Content2 (das ist nicht das Gui-Objekt) geht (also in einem Client, der veraltet ist), dann sollte es reichen auf dem Schema ein #resetReadTimestamp() aufzurufen und ein #refresh auf dem Content2.
Content2 content;
final Schema schema = content.getSchema();
schema.resetReadTimestamp();
content.refresh();
context.logInfo("entity count=" + content.getData().size());
Ich weiß, dass dieser Weg vermutlich nicht der Beste ist, aber folgendes Szenario haben wir:
- auf einen Server (nicht der firstSpirit Server) werden XML-Dateien hochgeladen
- diese werden per PHP-Skript in die externe Datenbank importiert, die an firstSpirit angedockt ist (Datenquellen)
- dann soll firstSpirit bestimmte Detailseiten neu generieren und publizieren, da sich diese durch den XML-Import geändert haben könnten
Der letzte Schritt funktioniert aber nicht, da die Datenquelle nach dem Import nicht aktualisiert wird. Von daher werden keine neuen Detailseiten generiert und die Änderungen erscheinen nicht auf der Webseite.
Wenn ich die Datenquelle im Java-Client manuell aktualisiere und danach die Generierung/Publizierung starte funktioniert alles.
Bitte mal ein "schema.rollback()" probieren.