Search the FirstSpirit Knowledge Base
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 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
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
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
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
Hi Tim,
Nr.1 ist jetzt gelöst , es lag an der Public Komponente, 2 tut leider immer noch nicht
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.
Hallo Sebastian,
was genau meinst du mit
Audgerufen wird der Button in einem Context Menu Script.
Hallo Tim,
der Button wird im Formular eines Scriptes genutzt.
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