Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich habe ein WebEditPlugin mit Drag & Drop Handler geschrieben. Soweit so gut.
Laut Doku könne man per Parameter Werte übergeben.
<PARAM name="form_headline">#field.st_headline</PARAM>
Das klappt aber nur wenn ich als Value ein String verwende. Hätte ja schon gerne das FieldObjekt, aber das steht nicht in der Map. Warum? Doku falsch verstanden, Bug? Ahja die Abfrage erfolgt in einer Executable Klasse und nicht im Script.
Danke Lars
Hallo,
viel weiter bin ich noch nicht gekommen! Ich habe eine WebEditPlugin entwickelt, das es ermöglicht per Drag & Drop Bilder zwischen einem Repository und einer Text-Bild Komponente auszutauschen. Die geschieht per Executable Class. Im Moment suche ich mir die Zielkomponente durch diverse For Schleifen. Allerdings sollte ich mir die Zielkomponente als Parameter übergeben können http://www.e-spirit.com/odfs50/de/vorlagenentwicklung/vorlagensyntax/systemobjekte/field/field.html.
Wird durch die Verwendung des Systemobjekts #field eine Eingabekomponente an ein Skript oder eine Java-Klasse weitergegeben, so wird diese anhand des Parameter-Namens (name-Attribut des <PARAM/>-Tags) zur Verfügung gestellt - im Falle von Skripten direkt als Variable, im Falle von Executable-Klassen über das Map<String, String>-Objekt, das denexecute()-Methoden übergeben wird.
Allerdings ist das Fieldobject nicht in der Map zu finden. Übergebe ich als Paramter einen String, dann findet sich dieser auch in der Map. In einem Script kann ich tatsächlich auf das Fieldobjekt zugreifen, warum nicht in der Executable Class?
Achja als letztes getestet unter Server-Version: 5.0.318.57504
Danke Lars
Hallo Lars,
poste doch mal die komplette Konfiguration der beteiligten Formularelement und den Quellcode der Executable. Wir benutzen das selbst in Modulen, ich bin also relativ sicher, dass das grundsätzlich funktioniert.
Viele Grüße
Christoph
Hallo,
dann will ich mal versuchen die wichtigen Dinge zu posten.
public class DropHandler implements Executable {
@Override
public Object execute(Map<String, Object> context, Writer out, Writer err) throws ExecutionException {
scriptContext = (BaseContext) context.get("context");
String fieldName;
try
{
fieldName = context.get("image_field").toString();
}catch (Exception e)
{
fieldName = "st_image";
}
}
Mehr ist es an der Stelle auch gar nicht. Wie gesagt "image_field" steht im Context nur zur Verfügung wenn ich als Parameter ein String angebe. Sowie ich die Doku verstehe muss es aber auch möglich sein das Fieldobjekt zu übergeben. Dann kann ich im Context aber und den Namen "image_field" nichts mehr finden.
Aufruf aus dem Template:
<FS_BUTTON
name="st_add_image"
hidden="yes"
icon="fs:new"
noBreak="yes"
onDrop="class:xxxxxxxxxxx.DropHandler"
style="firstspirit"
useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Add Content Image"/>
<LANGINFO lang="DE" label="Inhalts-Bild einfügen"/>
</LANGINFOS>
<PARAMS>
<PARAM name="image_field">st_image</PARAM>
</PARAMS>
</FS_BUTTON>
Danke Lars
Mhh, so auf den ersten Blick sehe ich auch keinen Fehler. Hier mal ein Auszug aus unseren Videomanagement Modul, wo wir das auch nutzen. Vielleicht hilft es den Fehler zu finden Dort klappt es auf jeden Fall:
public class OpenEditVideoExecutable extends AbstractExecutable {
@Override
public Object execute(final Map<String, Object> params, final Writer out, final Writer err) throws ExecutionException {
context = params.get("context");
if(context instanceof BaseContext) {
final FormField formField = (FormField) params.get("target");
if(formField != null) {
final TargetReference targetReference = (TargetReference) formField.get();
...
"target" ist hier der Param der den Namen einer FS_REFERENCE Formularkomponente enthält.
"context" ist bei uns eine Instanz von Object. Wir machen also keinen Cast.
Hi Lars,
im ersten Posting steht richtigerweise "#field" als Prefix, damit das FormField-Objekt als Parameter hereingegeben wird. In der geposteten Button-Konfiguration fehlt der Prefix, ohne den wird nur der Text als Parameter übergeben.
In welchem Kontext befindet sich denn der Button? Ist er Teil eines Formulars oder Teil einer Vorlage?
Gruß
Stefan
Hallo Stefan,
ok das Beispiel welche ich gepostet habe, ist das wo die Übergabe mit String funktioniert. Wenn ich den Test mit dem Fieldobjekt versuche dann sieht der Parameter wie folgt aus:
<PARAM name="image_field">#field.st_image</PARAM>
Der Button ist Teil eines Formulars.
Grüße Lars
Hi Lars,
das sollte in der Tat funktionieren. Wenn es dir möglich ist, ein (Test-)Projekt mit der Problematik bereitzustellen, wäre es am Besten, wenn du mit unserem HelpDesk Kontakt aufnimmst, damit wir das hier lokal nachvollziehen können. Wie Christoph bereits schrieb, haben wir funktionierende Anwendungen dieser Funktionalität. Da muss ein Teufelchen im Detail stecken.
Gruß
Stefan
Hallo,
ich fasse hier nochmal das Problem zusammen:
-----------------------
Formular:
<CMS_MODULE>
<FS_BUTTON name="st_button" hidden="no" icon="fs:new" onClick="script:clickhandlerscript"><LANGINFOS>
<LANGINFO lang="*" label="Button"/>
</LANGINFOS>
<PARAMS>
<PARAM name="drop_image">#field.st_headline</PARAM>
</PARAMS>
</FS_BUTTON>
</CMS_MODULE>
Skript "clickhandlerscript" (s.o.)
//!Beanshell
operationAgent = context.requireSpecialist(de.espirit.firstspirit.agency.OperationAgent.TYPE);
requestOperation = operationAgent.getOperation(de.espirit.firstspirit.ui.operations.RequestOperation.TYPE);
if (drop_image != null) {
requestOperation.perform(
"Information about component: " + drop_image.getName() +
", current value: " + drop_image.get() +
", is this a default? " + drop_image.isDefault()
);
}
Ausgabe des Formulars:
<span
$CMS_VALUE(editorId(editorName:"st_button"))$
$CMS_VALUE(fsbutton(editorName:"st_button"))$">
</span>
--------------------------------------
Das Problem war: es fehlte $CMS_VALUE(editorId(editorName:"st_button"))$ in der Ausgabe des Formulars.