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