Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich habe eine Regel, die folgendermaßen aussieht:
<RULE>
<WITH>
<NOT>
<AND>
<PROPERTY name="VISIBLE" source="st_videoUrl"/>
<PROPERTY name="TRANSLATED" source="#global"/>
<PROPERTY name="EMPTY" source="st_videoUrl"/>
</AND>
</NOT>
</WITH>
<DO>
<VALIDATION scope="SAVE">
<PROPERTY name="VALID" source="st_videoUrl"/>
<MESSAGE lang="*" text="Please enter a video url!"/>
<MESSAGE lang="DE" text="Bitte geben Sie eine URL zum Video an!"/>
</VALIDATION>
</DO>
</RULE>
Mithilfe einer anderen Regel kann st_videoUrl durch einen TOGGLE eingeblendet werden und soll dann zum Pflichtfeld werden. Laut Doku ist die PROPERTY name="VISIBLE" auch innerhalb der Wertermittlung WITH erlaubt.
Jedoch fliegen bei jedem Aufruf Unmengen von Warnungen dieser Art (ca. 30 Stück pro Klick):
WARN 25.06.2018 13:31:18.599 (de.espirit.firstspirit.forms.rules.Rule): 'VISIBLE' is no valid fact in this context ('st_videoUrl')!
Was mache ich falsch und wie bekomme ich die Fehler weg?
Grüße
Matthias
Hallo nochmal,
da mir niemand erklären konnte, warum die o.g. Konstruktion Fehler wirft, obwohl das m.E. so in der Doku steht, habe ich jetzt doch alles umgebaut. Ich stelle hier nochmal die ursprüngliche Version der endgültigen gegenüber, mit der nach langer Rumprobiererei endlich keine Fehler mehr auf der Console ausgegeben werden.
Ursprünglich:
- <RULE>
- <WITH>
- <NOT>
- <AND>
- <PROPERTY name="VISIBLE" source="st_videoUrl"/>
- <PROPERTY name="TRANSLATED" source="#global"/>
- <PROPERTY name="EMPTY" source="st_videoUrl"/>
- </AND>
- </NOT>
- </WITH>
- <DO>
- <VALIDATION scope="SAVE">
- <PROPERTY name="VALID" source="st_videoUrl"/>
- <MESSAGE lang="*" text="Please enter a video url!"/>
- <MESSAGE lang="DE" text="Bitte geben Sie eine URL zum Video an!"/>
- </VALIDATION>
- </DO>
- </RULE>
Da die Eigenschaft VISIBLE aber im WITH zu den Fehlern geführt hat (die Regel wurde korrekt ausgeführt, hat aber ständig Fehler geschmissen), habe ich dort den TOGGLE Schalter st_mediaType abgefragt, nämlich über <PROPERTY name="VALUE" source="st_mediaType"/>. Da dies wiederum zwar eine Boolean Abfrage ist, aber offenbar im ausgeschalteten Zustand auch null annehmen kann, musste ich noch eine zusätzliche Vorbedingung einbauen, ob das Feld überhaupt einen Wert enhält. Den Übersetzungsstatus der Seite habe ich auch in die Vorbedingung verlagert, da es im WITH auch zu Fehlermeldungen kam. So sieht es jetzt aus:
<RULE>
<IF>
<AND>
<PROPERTY name="TRANSLATED" source="#global"/>
<NOT>
<PROPERTY name="EMPTY" source="st_mediaType"/>
</NOT>
</AND>
</IF>
<WITH>
<NOT>
<AND>
<NOT>
<PROPERTY name="VALUE" source="st_mediaType"/>
</NOT>
<PROPERTY name="EMPTY" source="st_videoURL"/>
</AND>
</NOT>
</WITH>
<DO>
<VALIDATION scope="SAVE">
<PROPERTY name="VALID" source="st_videoURL"/>
<MESSAGE lang="*" text="Please enter a video url!"/>
<MESSAGE lang="DE" text="Bitte geben Sie eine URL zum Video an!"/>
</VALIDATION>
</DO>
</RULE>
Diese Konstruktion sieht zwar unübersichtlicher aus, schreibt mir aber (bislang) nicht das ganze Serverlog voll.
Grüße
Matthias
Hallo Matthias,
hast du mal versucht die Bedingung bzgl der Sichtbarkeit des Feldes in den IF-Block auszulagern, so dass deine Validierungs-Regel nur ausgeführt wird, wenn das Feld auch sichtbar ist, anstatt sie immer auszuführen und die Sichtbarkeit als Teil der Validierungs-Kriterien zu definieren?
In etwa so:
Anschließend gibt es aber scheinbar eine andere kleine Unschönheit:
Dem kann man mit einer zweiten Regel entgegenwirken, die die Validierung zurücksetzt sobald das Feld nicht sichtbar ist:
Das sollte dein Problem hoffentlich lösen, ansonsten sag nochmal Bescheid.
Beste Grüße
Christian
Hallo Matthias,
ich hatte einen ähnlichen Fall und habe anstatt der Sichtbarkeit den Status des Toggles abgefragt.
Vielleicht Hilft dir mein Beispiel ja.
So in etwa:
<RULE>
<WITH>
<NOT>
<AND>
<PROPERTY name="EMPTY" source="st_videoUrl"/>
<PROPERTY name="TRANSLATED" source="#global"/>
<EQUAL>
<PROPERTY name="VALUE" source="st_toggle"/>
<FALSE/>
</EQUAL>
</AND>
</NOT>
</WITH>
<DO>
<VALIDATION scope="SAVE">
<PROPERTY name="VALID" source="st_videoUrl"/>
<MESSAGE lang="*" text="Please enter a video url!"/>
<MESSAGE lang="DE" text="Bitte geben Sie eine URL zum Video an!"/>
</VALIDATION>
</DO>
</RULE>
Hallo Matthias,
benötigst Du noch weitere Hilfe oder haben Dir die beiden bisherigen Antworten bereits geholfen? In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung
gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.
Beste Grüße
Christian
Hallo,
vielen Dank für die Antworten! Sie helfen natürlich, die Fehlermeldungen zu beseitigen, aber so ganz beantwortet ist meine Frage nicht.
Vielleicht kam es in meinem ersten Eintrag nicht so rüber, aber ich wollte eigentlich nicht wissen, wie ich es ANDERS machen kann, sondern, WARUM bei diesem Konstrukt diese Fehler fliegen, obwohl es laut Dokumentation erlaubt ist, VISIBLE innerhalb vom WITH zu verwenden?!
Online Dokumentation FirstSpirit - <PROPERTY/> Eigenschaften für Formular-Elemente definieren
Gibt es eine Bedingung dafür, die ich nicht erfüllt habe oder ist das möglicherweise ein Bug? Wenn ich die Sichtbarkeit eines anderen Elementes abfrage, möchte ich nicht, dass bei jedem Klick eine Exception kommt. Klar kann ich es umbauen, aber dann frage ich mich, warum es so in der Doku steht?!
Viele Grüße
Matthias
Hallo nochmal,
da mir niemand erklären konnte, warum die o.g. Konstruktion Fehler wirft, obwohl das m.E. so in der Doku steht, habe ich jetzt doch alles umgebaut. Ich stelle hier nochmal die ursprüngliche Version der endgültigen gegenüber, mit der nach langer Rumprobiererei endlich keine Fehler mehr auf der Console ausgegeben werden.
Ursprünglich:
- <RULE>
- <WITH>
- <NOT>
- <AND>
- <PROPERTY name="VISIBLE" source="st_videoUrl"/>
- <PROPERTY name="TRANSLATED" source="#global"/>
- <PROPERTY name="EMPTY" source="st_videoUrl"/>
- </AND>
- </NOT>
- </WITH>
- <DO>
- <VALIDATION scope="SAVE">
- <PROPERTY name="VALID" source="st_videoUrl"/>
- <MESSAGE lang="*" text="Please enter a video url!"/>
- <MESSAGE lang="DE" text="Bitte geben Sie eine URL zum Video an!"/>
- </VALIDATION>
- </DO>
- </RULE>
Da die Eigenschaft VISIBLE aber im WITH zu den Fehlern geführt hat (die Regel wurde korrekt ausgeführt, hat aber ständig Fehler geschmissen), habe ich dort den TOGGLE Schalter st_mediaType abgefragt, nämlich über <PROPERTY name="VALUE" source="st_mediaType"/>. Da dies wiederum zwar eine Boolean Abfrage ist, aber offenbar im ausgeschalteten Zustand auch null annehmen kann, musste ich noch eine zusätzliche Vorbedingung einbauen, ob das Feld überhaupt einen Wert enhält. Den Übersetzungsstatus der Seite habe ich auch in die Vorbedingung verlagert, da es im WITH auch zu Fehlermeldungen kam. So sieht es jetzt aus:
<RULE>
<IF>
<AND>
<PROPERTY name="TRANSLATED" source="#global"/>
<NOT>
<PROPERTY name="EMPTY" source="st_mediaType"/>
</NOT>
</AND>
</IF>
<WITH>
<NOT>
<AND>
<NOT>
<PROPERTY name="VALUE" source="st_mediaType"/>
</NOT>
<PROPERTY name="EMPTY" source="st_videoURL"/>
</AND>
</NOT>
</WITH>
<DO>
<VALIDATION scope="SAVE">
<PROPERTY name="VALID" source="st_videoURL"/>
<MESSAGE lang="*" text="Please enter a video url!"/>
<MESSAGE lang="DE" text="Bitte geben Sie eine URL zum Video an!"/>
</VALIDATION>
</DO>
</RULE>
Diese Konstruktion sieht zwar unübersichtlicher aus, schreibt mir aber (bislang) nicht das ganze Serverlog voll.
Grüße
Matthias
Hallo Matthias,
du schreibst folgendes zum Toggle: aber offenbar im ausgeschalteten Zustand auch null annehmen kann
Das ist, meines Wissens nach, nur halb richtig. Wenn im Toogle NOCH NIE ein Wert eingestellt wurde, das Element also initial deselektiert ist, ist der Wert null. Sobald es einmal selektiert wurde, klappen die "normalen" Boolean-Abfragen. Dann bringt auch ein erneutes deselektieren ein false als Ergebnis.
Das ist der Grund, warum ich ein Toggle in den Voreinstellungen an und wieder ausschalte und das abspeichere, sollte ich den delektierten Wert als default bevorzugen.
Das ist eine alte Java-Krankheit bei Toggles. Immer wieder voller Spaß!
btw: seit fast einem Jahr hab ich dazu ein Ticket bei der e-Spirit auf "in development": https://help.e-spirit.com/servicedesk/customer/portal/6/HELP-48527
das wird bestimmt richtig gut ^^