kannengi
Elite Observer

Executable kann nicht über Menü gestartet werden

Jump to solution

Hallo Community,

vielleicht könnte mir jemand einen Tip geben - ich habe eine Executable-Klasse (aus einem von mir installierten Modul),

die ich über ein Skript im SiteArchitect starten möchte.

Die Sache ist die, dass das nur geht, wenn ich in den Eigenschaften des Skripts den Geltungsbereich "Kontextmenü" wähle.

Wenn ich "Menü" auswähle und versuche das Skript zu starten (über "Extras" -> "Skript ausführen"), kommt eine Error

(de.espirit.firstspirit.common.ScriptUtil): de.espirit.firstspirit.impl.access.GuiScriptContextImpl

ohne Stacktrace.

Anscheinend wird die Ausführung schon vor dem Aufruf des Executable gestoppt.

Mein Skript:

#!executable-class

GlobalZipcodeInfoImportExecutable

module.xml:

<!DOCTYPE module SYSTEM "lib/module.dtd">

<module>

    <name>rl_pdb3-importer</name>

    <version>1.0.0</version>

    <description>FS Module for importing data into PDB 3.0</description>

    <vendor>re-lounge GmbH</vendor>

    <components>

        <public>

            <name>ZipcodePriceImportExecutable</name>

            <class>com.relounge.badenova.pdb3.importer.ZipcodePriceImportExecutable</class>

        </public>

        <public>

            <name>GlobalZipcodeInfoImportExecutable</name>

            <class>com.relounge.badenova.pdb3.importer.GlobalZipcodeInfoImportExecutable</class>

        </public>

    </components>

    <resources>

        <resource scope="module">lib/rl_pdb3-importer.jar</resource>

        <resource scope="module">lib/commons-lang-2.6.jar</resource>

        ...

    </resources>

</module>


FS Version 5.1.311.65223

Danke und Gruß,

Benny Kannengießer

// re-lounge

0 Kudos
1 Solution

Accepted Solutions

Hallo,

ich habe die Executable-Klasse jetzt so abgeändert, dass auf einen "ProjectScriptContext" getestet wird anstatt auf einen Content2ScriptContext und siehe da alles funktioniert.

Ich frage mich zwar, warum meine if-Abfrage vorher nicht die Exception geworfen hat, aber wenn's jetzt geht dann gut.

Danke und Gruß,

Benny Kannengießer

// re-lounge

View solution in original post

0 Kudos
3 Replies
marro
Crownpeak employee

Hallo Benny,

habe gerade mal versucht es nachzustellen (gleiche FS Version, gleicher Executable-Aufruf, ähnliche module.xml). Meine Executable gibt einfach nur eine Logging-Meldung aus. Und das funktioniert bei mir sowohl im Kontextmenü als auch im Menü über Extras -> Skript ausführen.

Könntest Du mir noch folgende Fragen beantworten:

Wo bekommst Du den Error? In der Java-Console?

Welche Java-Version verwendet ihr?

Und wie sehen die ersten Zeilen der execute-Methode eurer Executable aus?

Viele Grüße

Donato

0 Kudos

Hi Donato,

Den Fehler bekomme ich tatsächlich in der Java (Web Start) Console.

Java Version ist 1.7.0_67-b01 Java HotSpot(TM) 64-Bit Server VM.

Hier die Executable-Klasse:

package com.relounge.badenova.pdb3.importer;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Map;

import javax.swing.JFrame;

import com.relounge.badenova.pdb3.importer.gui.GlobalZipcodeInfoImportWizard;

import de.espirit.firstspirit.access.script.Executable;
import de.espirit.firstspirit.access.script.ExecutionException;
import de.espirit.firstspirit.access.store.contentstore.Content2ScriptContext;


public class GlobalZipcodeInfoImportExecutable implements Executable {

    @Override
    public Object execute(Map context) throws ExecutionException {
        return execute(context, new PrintWriter(System.out), new PrintWriter(System.err));
    }

    @Override
    public Object execute(Map params, Writer out, Writer err) throws ExecutionException {
        Object context = params.get("context");
        if (!(context instanceof Content2ScriptContext)) {
            try {
                err.append("context must implement 'Content2ScriptContext' [actual class: " + context != null ? context.getClass().getName() : "null" + "]");
            } catch (IOException e) {
                throw new ExecutionException(e);
            }
            return false;
        }
        GlobalZipcodeInfoImportController controller = new GlobalZipcodeInfoImportController((Content2ScriptContext) context);
        JFrame frame = new GlobalZipcodeInfoImportWizard(controller);
        frame.setResizable(true);
        return true;
    }

}

Ich habe es jetzt auch mal einer modifizierten Executable-Klasse probiert, die nur loggt, und das funktioniert dann!!

Danke und Gruß,

Benny

0 Kudos

Hallo,

ich habe die Executable-Klasse jetzt so abgeändert, dass auf einen "ProjectScriptContext" getestet wird anstatt auf einen Content2ScriptContext und siehe da alles funktioniert.

Ich frage mich zwar, warum meine if-Abfrage vorher nicht die Exception geworfen hat, aber wenn's jetzt geht dann gut.

Danke und Gruß,

Benny Kannengießer

// re-lounge

0 Kudos