aVogt
Returning Creator

Methode aus eigenem Modul in einer Vorlage aufrufen

Hallo,

ich habe ein eigenes Modul. Aus diesem Modul möchte ich nun gern eine Methode (die sind static) aufrufen und das Ergebnis in einer Vorlage (z.B. Absatz-, oder Formatvorlage ) ausgeben (In einem Script klappt das ohne Probleme).

Ich habe es mit

     $CMS_VALUE(package.class.methode(...))$

aber es wird ein fehler ausgegeben, dass die Methode nicht gefunden wird.

WARN : Replacing null value with empty default! Undefined method 'de.espirit.firstspirit.parser.eval.Undefined#convertEmail(...)

Muss ich dass Modul in den Forlagen noch bekannt machen, wenn ja wie? Oder funktioniert es event. gar nicht?

8 Replies
boesebeck
Crownpeak employee

Hallo,
du kannst die Klasse/Methode über
$CMS_VALUE(class("mein.package.Klasse").methode())$
bzw eine Instanz/Konstruktor über
$CMS_SET(class, class("mein.package.Klasse").new(...))$
$CMS_SET(class, class("mein.package.Klasse").instance(...))$
holen.
Gruß
Gerrit
0 Kudos

Hallo Gerrit,

funktioniert bei mir leider nicht.

Beim Methodenaufruf bekommen ich den Fehler:

ERROR: de.sachsen.sab.it.common.util.SABConvert
     inside of: Template 'Änderungsseite' (id=198128)
     inside of: $CMS_TRIM(level:2)$ - at 2, 14
     inside of: $CMS_VALUE(class("de.sachsen.sab.it.common.util.SABConvert").ConvertDateInMilis("12.12.2010"))$ - at 20, 1
WARN : Replacing null value with empty default!

    inside of: Template 'Änderungsseite' (id=198128)
    inside of: $CMS_TRIM(level:2)$ - at 2, 14
    inside of: $CMS_VALUE(class("de.sachsen.sab.it.common.util.SABConvert").ConvertDateInMilis("12.12.2010"))$ - at 20, 1

Bei Aufruf des Konstruktors bekomme ich eine  ClassNotFoundException.

in einem Script kann ich die Klasse importieren ...

0 Kudos
boesebeck
Crownpeak employee

Es ist aber ein Libary Modul und die Klasse kann man auch per Beanshell laden?

0 Kudos

ähm, das ist eine "normale" Java klasse.

Muss ich die anders aufbauen, damit die aus der beanshell geladen werden kann?

Was versteht man unter einem LibraryModul?

Mein Modul sieht wie folgt aus: alle Klassen wurden in ein jar-File gepackt, dass mit eine modul.xml versehen und "fertig" ist das Modul.

0 Kudos
boesebeck
Crownpeak employee

Die Klasse kannst du FirstSpirit nur über ein Libary Modul bekannt machen, schau dir mal folgendes an javascript:;

0 Kudos

uff, ...

eigenartig, warum ein Modul in den Scripten und nicht in den Vorlagen verwendet werden kann ... nun ja, da ist mal wieder Diku-Lesen angesagt.

Danke.

0 Kudos

Mal abgesehen davon, dass man so etwas sinnvoll einsetzen kann, glaube ich allerdings, dass der Aufruf

$CMS_VALUE(class("de.sachsen.sab.it.common.util.SABConvert").ConvertDateInMilis("12.12.2010"))$

schon über FirstSpirit Bordmittel realisierbar ist, ohne für diesen konkreten Fall eine eigene Klasse schreiben zu müssen (wobei ich jetzt nicht genau beurteilen kann, was wirklich dahinter steckt!).

Dazu könnte man zwei Ansätze wählen

1) $CMS_VALUE(#global.now.getTimeInMillis)$

oder wenn ein Datum übergeben werden muss

2) $CMS_SET(calendar, class("java.util.Calendar").instance)$

    $CMS_VALUE(calendar.setTime(....).getTimeInMillis)$

    oder

    $CMS_VALUE(calendar.set(....).getTimeInMillis)$

Gruß,

Daniel

PS: In den Aufrufen könnten Fehler sein, aber das wäre ein möglicher Weg ohne den Umweg über eine externe Klasse gehen zu müssen. Diesen Codeblock könnte man dann z.B. in eine Formatvorlage packen und diese beliebig in den Vorlagen aufrufen (dann könnten z.B. auch die Datumsübergaben daran gebunden werden etc).

Gruß,

Daniel

aVogt
Returning Creator

war ja auch nur ein Bsp. Ich hab andere Methoden, die ich verwenden möchte. Mir gings nur darum, wie ich es überhaupt realisieren kann

u.a. habe ich Methoden zum Formatieren einiger Sachen, die ich in Scripten und Aufträgen verwende. Da wollte ich nicht in den Vorlagen nicht noch einmal die Formatierung umsetzen. (wenn sich daran was ändert muss es an zwei Stellen geändert werden).

0 Kudos