Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich habe ein Skript geschrieben, das für zwei Felder in den Metadaten je eine speziellen String berechnet und diese dann dort speichern soll. Die Strings werden entsprechend berechnet und auch den Feldern zugewiese. Vor dem Speichern zeigt mir storeElement.getMeta() die Werte der Felder korrekt an. Dann speichere ich mit storeElement.save("Zähler URL hinzugefügt") und dann sind die gesetzten Strings wieder weg, wenn ich direkt danach noch einmal storeElement.getMeta() aufrufe.
Woran kann das liegen?
Das Skript sieht derzeit so aus:
//!Beanshell
import de.espirit.firstspirit.access.store.sitestore.PageRef;
import de.espirit.firstspirit.access.store.IDProvider;
import de.espirit.firstspirit.access.store.LockException;
import de.espirit.firstspirit.common.gui.CMSDialog;CMSDialog.showInfoDialog("Debug: Start");
storeElement = context.getStoreElement();if(storeElement instanceof PageRef) {
sElementStatus = storeElement.getReleaseStatus();
CMSDialog.showInfoDialog("Debug: Release-Status: " + storeElement.getReleaseStatus());
try {//Element sperren
storeElement.setLock(true, false);
if(storeElement.hasMeta()){
if(storeElement.isStartNode()){
uidPath= storeElement.getUid() + ".index";
}else{
uidPath= storeElement.getUid();
}String urlPathDe = storeElement.getMeta().get("md_url_de").getEditor().value;
String urlPathEn = storeElement.getMeta().get("md_url_en").getEditor().value;
if(urlPathDe != null && urlPathEn != null ){
urlPathDe = urlPathDe.replace("/",".").replace("-","_").trim();
urlPathEn = urlPathEn.replace("/",".").replace("-","_").trim();
//default speichern
uidPathDe = urlPathDe +"." +uidPath;
storeElement.getMeta().get("md_sstatcounter_default_de").getEditor().value = "content.de" +uidPathDe;
//CMSDialog.showInfoDialog("DE_url" +storeElement.getMeta().get("md_sstatcounter_default_de").getEditor().value);
//englisch speichern
uidPathEn = urlPathEn +"." +uidPath;
storeElement.getMeta().get("md_sstatcounter_default_en").getEditor().value = "content.en" +uidPathEn;
//CMSDialog.showInfoDialog("EN_url" +storeElement.getMeta().get("md_sstatcounter_default_de").getEditor().value);
CMSDialog.showInfoDialog("Meta vor dem speichern: " +storeElement.getMeta());
}else{
CMSDialog.showInfoDialog("Bitte überprüfen Sie in den Metadaten die Suchmaschinen-Optimierung. Ggf. ist hier kein Wert gesetzt!");
return false;
}
//CMSDialog.showInfoDialog("isLockSupported(): "+ storeElement.isLockSupported());
storeElement.save();
CMSDialog.showInfoDialog("Meta nach dem Speichern: " +storeElement.getMeta());if(sElementStatus == 0){
storeElement.release();
}
storeElement.setLock(false, false);
}else{
CMSDialog.showInfoDialog("Bitte überprüfen Sie in den Metadaten die Suchmaschinen-Optimierung. Ggf. ist hier kein Wert gesetzt!");
return false;
}
} catch (LockException e) {
CMSDialog.showInfoDialog(e.toString());
context.logInfo("Fehler, Objekt ist keine Seite!");
context.logInfo("=== Ende setzen des default SiteStat Counters ===");
return false;
}
}else{
context.logInfo("Fehler, Objekt ist keine Seite!");
context.logInfo("=== Ende setzen des default SiteStat Counters ===");
return false;
}
Viele Grüße
René Zoller
Hallo Rene,
du musst das ganze ein wenig umbauen bzw. erweitern. Auf dem StoreElement holst du dir das Data-Objekt
data = storeElement.getMeta();
Auf dem Data Objekt holst du dir dann die Werte und setzt bzw. veränderst sie.
Vor dem Speichern setzt du die Daten wieder mit
storeElement.setMeta(data);
storeElement.save();
Dann sollten die Werte auch richtig gesetzt sein.
Gruß,
Daniel
Und bitte immer beachten, dass bei einem nicht-rekursiven Lock:
storeElement.setLock(true, false);
auch nicht-rekursiv gespeichert werden muss:
storeElement.save("my meta data change comment", false);
Das gilt auch für die Freigabe:
storeElement.release(false);
Das Lock sollte in ein try/finally, sonst bleibt das Element mitunter gesperrt.
vergl. hierzu auch: https://community.e-spirit.com/message/1722#1722
Hallo Daniel,
vielen Dank für die schnelle Antwort. Genau richtig Deine Lösung. Das get/setMeta() hätte es bei mir auch klingeln lassen können
Vielen Dank!
René
Hallo Sebastian,
vielen Dank für die Hinweise. Ich habe sie in der aktuellen Version des Skript mit berücksichtigt.
Vielen Dank!
René