Search the FirstSpirit Knowledge Base
Hallo allerseits,
ich versuche eine Eingabekomponente mit einem in der Vorlage generierten Wert zu befüllen und rufe hierfür ein Skript auf, das diesen Wert in das entsprechende Absatzformular einfügen soll.
Dafür übergebe ich die SectionImpl (#global.section) und einen String an das Script.
Im Code unten bin ich bereits dazu übergegangen die Section über einen Broker zu holen.
Leider verursacht die Zeile "storeElement.setLock(true, false);" immer den Fehler "Target exception: java.lang.SecurityException: read only store"
Was muss ich tun um hier ein schreibbares / lockbares Element zu erhalten?
"isLockSupported" returns true und das angesprochene Formfeld "st_titel" beinhaltet nach ausführung des scripts (ohne Lock) auch Zeitweise den gegebenen Wert.
Im tatsächlichen Formular kommt dieser aber nie an.
Code:
//!Beanshell
import java.lang.String;
import de.espirit.firstspirit.access.store.LockException;
import de.espirit.firstspirit.access.store.*;
import de.espirit.firstspirit.access.store.Store;
import de.espirit.firstspirit.access.store.Pagestore;
import de.espirit.firstspirit.agency.SpecialistsBroker;
import de.espirit.firstspirit.agency.StoreAgent;
StoreAgent storeAgent = context.requestSpecialist(StoreAgent.TYPE);
Store pageStoreRoot = (Store) storeAgent.getStore(Store.Type.PAGESTORE);
storeElement = pageStoreRoot.getStoreElement(section.id);
language = (context.getContext().getVariableNames().contains("language")) ? context.getVariableValue("language") : context.getProject().getMasterLanguage();
try {
storeElement.setLock(true, false);
try {
formData = storeElement.getFormData();
formFieldData = formData.get(language, formField);
if (!title.equals(formFieldData.get())) {
formFieldData.set(title);
storeElement.setFormData(formData);
storeElement.save;
}
} catch (Exception e) {
...
} finally {
storeElement.setLock(false, false);
}
catch ...
Hi Arne,
rufst du das Skript etwa in einem Template auf - also während der Generierung?
Da befindest du dich nämlich immer im Read-Only Store. Ist auch nicht zu empfehlen, während der Generierung zu Schreiben. Die Änderung würde das Generat dann auch gar nicht mehr mitkriegen. Vllt. solltest du mal kurz weiter ausholen, was denn die genaue Anforderung bzw. das Ziel deines Skriptes ist.
Gruß
Felix
Hallo Arne,
es sollte reichen, wenn du beim Aufruf von getStor enoch ein false als zweiten Parameter mitgibst:
Store pageStoreRoot = (Store) storeAgent.getStore(Store.Type.PAGESTORE);
StoreAgent (FirstSpirit Developer-API)
Gruß
Felix
Hallo Felix,
vielen Dank für deine Antwort!
Leider hat es nicht geholfen, laut Doku wird bei auslassen das Parameters ebenso wie bei "false" der current-State geholt.
Sind Seiten und Absätze im Inhaltsbereich evtl grundsätzlich nicht schreibbar? Mein Section Element hat auch keine Uid, hängt es irgendwie damit zusammen?
Viele Grüße,
Arne
Hallo Arne,
sections haben generell keine Uid. Ich mache aktuell genau das gleiche in einem Skript und habe damit keine Probleme.
Probier mal statt der Section die dazugehörige Page zu locken. Wäre dann auf dem schnellen Weg so:
storeElement.getParent().getParent().setLock(true, true);
Auch auf der Page habe ich das gleiche Problem.
Auch wenn ich mit storeElement.getParent() darauf zugreife kommt der selbe Fehler (storeElement.getParent().getParent() ist null)
Hier die Vorschau-Fehlerausgabe:
02.08.2021 12:49:04.354 INFO (Script 'setvideotitle' (id=403628) at 0, 0): isLocked: false
02.08.2021 12:49:04.354 INFO (Script 'setvideotitle' (id=403628) at 0, 0): LockSupported: true
02.08.2021 12:49:04.354 INFO (Script 'setvideotitle' (id=403628) at 0, 0): Page Class: de.espirit.firstspirit.store.access.pagestore.PageImpl
02.08.2021 12:49:04.354 ERROR (Script 'setvideotitle' (id=403628) at 0, 0): at 0, 0: Script 'setvideotitle' (id=403628) - Method Invocation storeElement.setLock : at Line: 53 : in file: inline evaluation of: ``__execute() { //!Beanshell // This script saves a given string to a given form f . . . '' : storeElement .setLock ( true )
Target exception: java.lang.SecurityException: read only store
at line 53
Hi Arne,
rufst du das Skript etwa in einem Template auf - also während der Generierung?
Da befindest du dich nämlich immer im Read-Only Store. Ist auch nicht zu empfehlen, während der Generierung zu Schreiben. Die Änderung würde das Generat dann auch gar nicht mehr mitkriegen. Vllt. solltest du mal kurz weiter ausholen, was denn die genaue Anforderung bzw. das Ziel deines Skriptes ist.
Gruß
Felix
Ja, momentan war das mein Plan.
Unser Kunde wünscht sich die Möglichkeit namentlich nach Werten die aus einem externen Plugin gepflegt werden (VideoManagerPro) innerhalb FirstSpirits zu suchen. Dafür möchten wir eine Eingabefeld mit dem Wert aus diesem Plugin füllen.
Da ich mir den Wert umständlich aus den Formdaten & diesem externen Plugin auslese und ich davon ausging, dass man auch während der Generierung änderungen an Seiten vornehmen kann (aufgrund eines älteren Skript von dem ich erwartete dass es funktioniert) habe ich es nicht hinterfragt.
Da ich das Skript eigentlich sowieso nicht mit der Generierung verknüpft lassen will werde ich jetzt versuchen die entsprechenden Werte aus FormData innerhalb des Skripts zu holen, anstatt Sie aus dem Template zu übergeben.
Da ich sowieso über "alle" Seiten iterieren möchte ist diese Lösung kein Problem
Vielen Dank für deine Hilfe!