- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Speichern von Metadaten
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
- Labels:
-
Developers
-
Knowledgebase
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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รฉ
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Sebastian,
vielen Dank fรผr die Hinweise. Ich habe sie in der aktuellen Version des Skript mit berรผcksichtigt.
Vielen Dank!
Renรฉ

