Skip to main content

FS5 Rules: Werte von Projekt- und Strukturvariablen auswerten

Comments

9 comments

  • Zendesk API User
    Author: stephan - 8/24/2012 8:13

    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
  • Zendesk API User
    Author: Peter_Jodeleit - 8/27/2012 8:27

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

    0
  • Zendesk API User
    Author: Prinzessin - 8/27/2012 9:20

    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
  • Zendesk API User
    Author: Prinzessin - 8/27/2012 9:21

    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
  • Zendesk API User
    Author: broszeit - 9/5/2012 11:49

    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

    0
  • Zendesk API User
    Author: felix_reinhold - 12/7/2012 10:35

    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
  • Zendesk API User
    Author: broszeit - 12/11/2012 10:30

    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
  • Zendesk API User
    Author: stephang - 4/16/2013 16:10

    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
  • Zendesk API User
    Author: StefanSchulz - 4/17/2013 12:30

    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

Please sign in to leave a comment.