switt
I'm new here

FS_Button Drop

Hallo,

ich möchte gerne einen FS_Button benutzen, um Text/CSV Dateien an ein Script übergeben zu können.

Problem Nr.1 ist, dass ich keine Klasse angeben kann als Drop Ziel. Ich habe den Button folgendermaßen konfiguriert:

onDrop="class:de.test.ClassName" wobei ClassName vom Typ Executable ist. Beim Speichern kommt hier immer die Fehlermeldung, dass die Excutable nicht geunden werden konnte, obwohl diese in einem Modul (scope=server) vorhanden ist. Das Problem konnte ich lösen indem ich einfach ein BeanshellScip ("#!executable-class ....") dazwischen geschaltet habe.

Problem Nr.2 ist, dass ich das gedropte Element nciht auslesen kann. Die Executable sieht so aus:

@Override
public Object execute(Map<String, Object> map) throws ExecutionException {

    BaseContext context = (BaseContext) map.get("context");
    CommodityContainer dropdata = (CommodityContainer) map.get("dropdata");
    TransferAgent transferAgent = context.requireSpecialist(TransferAgent.TYPE);
    TransferType<String> transferAgentType = transferAgent.getType("*/*", String.class);
    List texts = dropdata.get(transferAgentType);
    texts.size(); // is always 0

    return null;
}

Das Formular sieht so aus (habe hier auch schon mehrere Kombinationen ausprobiert):

<DROPTYPES>

   <MIME type="*/*" classname="java.lang.String"/>

   <MIME type="text/plain" classname="java.io.InputStream"/>

   <MIME type="text/comma-separated-values" classname="java.io.InputStream"/>

</DROPTYPES>

Ich habe scon mehrer "TransferType" ausprobiert, ohne Erfolg Smiley Sad Die Ergebnislisten size ist immer 0.

Ich hatte mir auch schon den AppCenter Showcase angeguckt, leider fehlt dort der entscheidende Teil.

PS: Wir setzten FS 5.2.314 ein.

Danke schon mal im Voraus,
Sebastian

0 Kudos
7 Replies
pavone
I'm new here

Hallo Sebastian,

hast du in deiner module.xml die Drop-Executable als Public-Komponente bekannt gemacht?

<public>

  <name>MyDropHandler</name>

  <description>My Drop Handler</description>

  <class>de.test.ClassName</class>

</public>

Wenn nicht, könnte das eine Ursache für dein erstes Problem sein. Wenn der Eintrag in der module.xml vorhanden ist, solltest du sowohl onDrop="class:MyDropHandler" als auch onDrop="class:de.test.ClassName" verwenden können.

Der Code deiner Executable sieht soweit erstmal richtig ist. Ich vermute, dass das Problem mit dem Mime- und Transfer-Type zu tun hat.

Was genau lässt du denn auf den Button fallen? Ein StoreElement? Ein Item aus einem Report? Mime- und Transfer-Type müssen natürlich zum tatsächlich gedroppten Element passen.

Viele Grüße

Tim

0 Kudos

Hi Tim,

Danke für die Antwort. Nr. 1 müsste ich noch mal ausprobieren, aber ja eine Public Komponente habe ich nicht definiert (hab ich so auch nicht in der Doku gesehen :smileyconfused:).

Zu Nr. 2: Ich lasse eine externe (= aus Windows) Datei auf den button fallen (eine txt und csv Datei).

Gruß,
Sebastian

0 Kudos

Hallo Sebastian,

versuch mal Folgendes:

In deinem Formular

<MIME type="text/plain" classname="java.io.InputStream"/>

Und in deiner Executable

transferAgentType = transferAgent.getPlainTextType();

Als Dropdata solltest du dann die URL der Datei bekommen.

Viele Grüße

Tim

0 Kudos

Hi Tim,

Nr.1 ist jetzt gelöst Smiley Happy , es lag an der Public Komponente, 2 tut leider immer noch nicht Smiley Sad

Der DropHandler sieht so aus:

public class DropHandler implements Executable {

    @Override
    public Object execute(Map<String, Object> map) throws ExecutionException {

        BaseContext context = (BaseContext) map.get("context");
        CommodityContainer dropdata = (CommodityContainer) map.get("dropdata");
        TransferAgent transferAgent = context.requireSpecialist(TransferAgent.TYPE);
        TransferType<String> transferAgentType = transferAgent.getPlainTextType();
        List texts = dropdata.get(transferAgentType);
        texts.size(); // is still always 0 😞

        return null;
    }

    @Override
    public Object execute(Map<String, Object> map, Writer writer, Writer writer1) throws ExecutionException {

        return execute(map);
    }

}

Und das Formular so:

<CMS_MODULE>

  <FS_BUTTON

    name="test"

    alwaysEnabled="yes"

    icon="info"

    onDrop="class:com.bosch.DropHandler"

    useLanguages="no">

    <DROPTYPES>

      <MIME type="text/plain" classname="java.io.InputStream"/>

    </DROPTYPES>

    <LANGINFOS>

      <LANGINFO lang="*" label="Drop something"/>

    </LANGINFOS>

  </FS_BUTTON>

</CMS_MODULE>

Audgerufen wird der Button in einem Context Menu Script.

0 Kudos

Hallo Sebastian,

was genau meinst du mit

Audgerufen wird der Button in einem Context Menu Script.

0 Kudos

Hallo Tim,

der Button wird im Formular eines Scriptes genutzt.

2016-09-12_07h53_05.png

0 Kudos

Hallo zusammen,

hier noch als allgemein Info: Für das beschriebene Problem gibt es aktuell keine allumfassende, offizielle Lösung. Das Problem haben wir aufgenommen, um es intern zu evaluieren.

Grüße,

Hannes

0 Kudos