Prinzessin
I'm new here

FS5 Rules: Werte von Projekt- und Strukturvariablen auswerten

Hallo,

ist es in der FS Version 5 möglich, in den Rules nicht nur auf Werte aus Formularfelder zuzugreifen, sondern auch auf Struktur-, Projektvariablen, etc?

Wir definieren diese Variablen je nach CMS-Projekt, z. B. ob eine Datenbank, Websitesuche, etc. angebunden ist. Diese Einstellungen wirken sich auch auf einige Seiten- und Absatztemplates aus. Da es hieß, dass in FS 5 Formulare dynamisch sind, hätte ich das gern wie in diesem Beispiel gelöst:

CMS-Strukturvariable mdb = 1 (in diesem Fall, ist eine Medien-Datenbank an das CMS-Projekt angebunden)

CMS-Strukturvariable mdb = 0 (es wird nur der Media Storage vom lokalen CMS-Projekt verwendet um Bilder in den GUI-Elementen auszuwählen)

Aufgrund dieser zwei Möglichkeiten, hatten wir früher unterschiedliche CMS-Templates (eines für Fall "1" und eines für Fall "0").

Wenn es nun über die Rules möglich wäre, diese Struktur- oder Projektvariable auszulesen und aus beiden Formularen ein einziges zu erstellen, in dem abhängig von der Variable mdb nur die für den User notwendigen GUI-Elemente erscheinen, wäre das die beste Lösung.

Ist das möglich und wenn ja wie? Gibt es hierzu eine Anleitung (die Online-Dokumentation FS5 "Dynamische Formulare" hat mir hier bisher nicht weiter geholfen).

14 Replies
stephan
I'm new here

Hallo Frau Neubauer,

es ist momentan leider noch nicht möglich auf Struktur-, Projektvariablen, etc. direkt innerhalb einer Regel zuzugreifen. Es gibt allerdings schon mehrere Featurewünsche in diesem Kontext.

Variablen als Vorbelegungen (über RULES?) (Interner Querverweis: TS#122899)

Validation: Unterscheidung von SiteStore-Foldern und PageRefs (Interner Querverweis: TS#112244)

Viele Grüße

Jörg Stephan

0 Kudos
Peter_Jodeleit
Crownpeak employee

Ja, das ist möglich, allerdings nur über ein Modul mit einem "ValueService".

Peter
0 Kudos

Hallo Herr Jodeleit,

könnten Sie etwas mehr zu dem Modul sagen? Wie heißt das genau? Hier habe ich leider nichts gefunden: http://www.e-spirit.com/de/product/modules/module.html oder ist das in einigen Modulen integriert? (Wir haben den Paketmanager, sowie Remote Media).

0 Kudos

Ist es möglich Variablen aus den Projekteinstellungen auszulesen bzw. hat man irgendwo die Möglichkeit selbst Variablen / Einstellungen zu definieren, die man in den Formularen auslesen kann und entsprechend die Formular-Elemente ausblenden kann?

Ist es möglich Meta-Daten auszulesen?

0 Kudos

Hallo,

das Modul muss in diesem Falle selbst entwickelt werden. Dies ist allerdings kein allzu großer Aufwand, wenn nur die Variablen ausgelesen werden sollen.

Hierzu muss eine Klasse geschrieben werden, die den angesprochenen "ValueService" implementiert:

http://www.e-spirit.com/odfs50/dev/de/espirit/firstspirit/service/value/ValueService.html

Die Methode getValue liefert dann den entsprechenden Wert der gewünschten Variablen zurück und mithilfe des <SCHEDULE> Tags kann man diesen ValueService dann nutzen um den Rückgabewert der Methode getValue() in ein beliebiges Feld zu schreiben. Anschließend kann man weitere Regeln definieren, welche die Eingabekomponenten in Abhängigkeit von diesem Feld ausblenden.

Der Code für den Aufruf des Service könnt ungefähr so aussehen, wobei der Parameter "varName" dann vom ValueService genutzt werden kann um zum Beispiel nach einer Variable mit diesem Namen zu suchen und deren Wert zurückzugeben.

<RULES>

          <ON_EVENT>

                    <SCHEDULE service="my service" id="x" delay="1300">

                              <PARAM name="varName">

                                        <PROPERTY source="st_varName" name="VALUE"/>

                              </PARAM>

                    </SCHEDULE>

                    <DO>

                              <PROPERTY source="st_mdb" name="VALUE"/>

                    </DO>

          </ON_EVENT>

</RULES>

Viele Grüße

Rouven

Hallo,

ich wollte nun auch einen VAlueService nutzen, um einige Werte in meinem Formular vorzubelegen.

Aber gibt es irgendeine Möglichkeit mit dem SpecialistsBroker an das aktuelle StoreElement zu kommen? Bzw. kann ich als Parameter vllt. einen Ausdruck übergeben wie #global.page.name?

Hintergrund: Per Regel wollen wir in einem Textfeld den aktuellen Seitennamen als Defaultwert hinterlegen.

Viele Grüße

Felix

0 Kudos

Hallo Felix,

ja, das ist möglich.

Man kann zum Beispiel ein Skript in einem Ausgabekanal mit CMS_RENDER aufrufen, welches #global.page.name übergeben bekommt und diesen mit context.setProperty() speichert.

Im ValueService kann man dann wieder das Property aus dem Context auslesen.

Es muss nur sichergestellt werden, dass man dies im gleichen Context macht.

Viele Grüße

Rouven

0 Kudos

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

0 Kudos

Hi,

was mich ein wenig wundert ist, dass keine Fehlermeldungen im Log erscheinen. Beim Speichern stehen Services eigentlich nicht zur Verfügung.

Bitte nochmals im Logfile nachschauen und die Korrektheit der Regel via ON_EVENT überprüfen.

Gruß

Stefan

0 Kudos