Jan_Wehe
I'm new here

Datenquelle per Skript aktualisieren?

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()+"");

10 Replies
StefanSchulz
I'm new here

Eventuell hilft hier schon ein db.refresh()?

Stefan.

0 Kudos

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();

0 Kudos

Hallo Herr Wehe,

von welcher Stelle aus rufen Sie die Codezeilen auf? Mit welcher FirstSpirit Version arbeiten Sie aktuell?

0 Kudos

Ich habe die Codezeilen in einem Skript stehen, das ich über das Menü aufrufe.

Wir benutzen firstSpirit 4.2.454.47473

0 Kudos
aVogt
Returning Creator

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

0 Kudos

Leider ist es mir auch über den TEMPLATESTORE nicht gelungen die Datenquelle zu aktualisieren.

Hat noch jemand einen Tipp für mich?

0 Kudos
gockel
Crownpeak employee

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.

0 Kudos

Bitte mal ein "schema.rollback()" probieren.

Peter