Hallo,
der letzte Post ist zwar schon eine Weile her, allerdings beschäftige ich mich gerade mit dem gleichen Thema. Ich möchte den Vorschlag mit dem ValueService in einer sehr einfachen Variante ausprobieren. Meiner Meinung nach habe ich alles umgesetzt wie von Rouven vorgeschlagen, aber es läuft nicht und meinen Fehler sehe ich auch nicht.
In einer Seitenvorlage habe ich folgende Regel definiert:
<RULES>
<ON_SAVE>
<SCHEDULE service="Rules" id="x" delay="10">
<PARAM name="arg1">
<TEXT>hallo</TEXT>
</PARAM>
<PARAM name="arg0">
<TEXT>hallo</TEXT>
</PARAM>
</SCHEDULE>
<DO>
<PROPERTY source="test2" name="VALUE"/>
</DO>
</ON_SAVE>
</RULES>
Wenn ich das richtig verstanden haben, müsste beim Speichern meiner Inhaltsvorlage der Wert, den mir mein getValue(...) aus dem ValueService zurückliefert, in die Formular-Komponente "test2" geschrieben werden. Diese sieht so aus:
<CMS_INPUT_TEXT name="test2">
<LANGINFOS>
<LANGINFO lang="*" label="test"/>
</LANGINFOS>
</CMS_INPUT_TEXT>
Mein Modul ist einfach nur eine public Klasse, die ich entsprechend dem Beispiel aus dem dynamischen Formular (ODFS) gebaut habe.
module.xml
<module>
<name>Rules</name>
<version>@VERSION@</version>
<description>Additional rule helper</description>
<vendor>evodion</vendor>
<components>
<public>
<name>Rules</name>
<class>de.evodion.Rules</class>
<resources>
<resource>lib/rules-@VERSION@.jar</resource>
</resources>
</public>
</components>
</module>
Und die Klasse sieht so aus:
import java.util.Map;
import de.espirit.common.base.Logging;
import de.espirit.firstspirit.agency.SpecialistsBroker;
import de.espirit.firstspirit.service.value.ValueService;
public class Rules implements ValueService
{
private static final Class<?> LOGGER = Rules.class;
private String text;
public Rules(String text)
{
this.text = text;
}
public String ausgabe()
{
Logging.logError("in der ausgabe methode", LOGGER);
return (text);
}
@Override
public Object getValue(SpecialistsBroker param1, Map<String, ?> param2)
{
Logging.logError("in der getvalue methode", LOGGER);
return "hallo";
}
}
Ich würde erwarten, dass in das CMS_INPUT_TEXT mit dem Namen test2 hallo reingeschrieben wird. Aber es passiert gar nichts. In der fs-server.log hätte ich die Error_Meldung "in der getvalue methode" erwartet, aber diese erscheint ebenfalls nicht. Es scheint, als würde <SCHEDULE service="Rules" id="x" delay="10"> nicht die getValue Methode aus meinem ValueService aufrufen.
Die Installation des Moduls hat funktioniert und in der HTML Ausgabe der Seitenvorlage kann ich eine neue Instanz von Rules erzeugen und die Methode ausgabe() gibt mir auch den im Konstruktor übergebenen Text aus.
Hat jemand eine Idee, warum das nicht geht? Was habe ich falsch gemacht? Falls ich irgendwas vergessen habe zu posten, lasst es mich wissen.
Danke schon mal für die Bemühungen im Voraus.
Stephan
PS: System: FirstSpirit 5.0.210.55494; Java 7