Questions & Answers

lschilling
I'm new here

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

0 Kudos
8 Replies
lschilling
I'm new here

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

0 Kudos

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

0 Kudos

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

0 Kudos

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.

0 Kudos

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

0 Kudos

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

0 Kudos

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

0 Kudos
klein
Crownpeak employee

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.

0 Kudos

Type a product name