- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
WebEdit Plugin und Parameter
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
- Labels:
-
Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.