daniel_philippi
Occasional Collector

FS5 Regeln: Regeln bei mehrsprachigen Projekten unbrauchbar?

Jump to solution

Hallo Zusammen.

Regeln zu definieren ist toll, endlich verständlicherere Fehlermeldungen. Allerdings haben sie einen großen Nachteil wie ich gerade feststellen musste. Sie gelten nämlich für alle Sprachreiter.

Beispiel:

Wenn ich bei einer Eingabekomponente allowEmpty="no" gesetzt habe konnte ich das Formular in dem Sprachreiter in dem ich bin, nur speichern wenn es gefüllt ist. In einer anderen Sprache wurde es nicht gefüllt wird aber auch ignoriert, da ich im aktuellen Sprachreiter alles ausgefült habe.

Bei den Regeln ist es nun so, dass die Regel s.u. nun in allen Sprachen greift. D.h. wenn die Redakteure in Deutschland eine neue Seite erstellen müssen sie auch zwingend den englischen und chinesischen Inhalt einfügen. Das wird natürlich nicht gehen, damit wären dann aber die schönen Regeln für uns unbrauchbar.

Ist das so beabsichtigt? Vielleicht fehlt auch noch was in der Regeldefinition wobei ich diese aus der Doku bzw. dem Midras Projekt habe?!

Viele Grüße,

Daniel

<ON_SAVE>

    <WITH>

        <NOT>

            <PROPERTY source="pt_description" name="EMPTY"/>

        </NOT>

    </WITH>

    <DO>

        <VALIDATION>

            <PROPERTY source="pt_description" name="VALID"/>

            <MESSAGE lang="*" text="The META DESCRIPTION must not be empty!"/>

            <MESSAGE lang="DE" text="Der META DESCRIPTION darf nicht leer sein!"/>

        </VALIDATION>

    </DO>

</ON_SAVE>

1 Solution

Accepted Solutions

Hallo Daniel,

bei mir unter v5.0.106 funktioniert es so nicht - jedenfalls nicht in allen Variationen der Reihenfolge von Benutzeraktionen - genau das war ja mein Punkt 😉

Deine Regel sorgt lediglich für ein Markieren als "ungültig / nicht speicherbar" beim SETZEN des Hakens "übersetzt" bei leeren Feld. Wenn man den Haken direkt danach wieder entfernt, bleibt die rote Markierung als "ungültig" erhalten.

Durch die Vorbedingung erfolgt eine Auswertung bzw. das "Setzen" der Gültigkeit nur wenn/solange der Haken gesetzt ist. Dazu gehört aber nicht nur das "ungültig" setzten, sondern auch das (wieder) "gültig" setzen. Genau letzteres soll auch soweit ich es verstanden habe beim Entfernen des Hakens passieren. Die Vorbedingung verhindert das aber und verwirrt dadurch wahrscheinlich den Redakteur:

Immerhin ist ein und derselbe Zustand (Kein Haken bei "übersetzt" UND leeres Feld) nun angeblich ungültig, der vorher gültig war.

Ein Speichern ist allerdings trotzdem möglich, hier scheint eine separate Validierung angestoßen zu werden mit "frischen" Gültigkeitsstati.

Dennoch sollte man das ganze für den Redakteuer konsistent gestalten (wenn rot, kein Speichern) - und dazu in diesem Fall wirklich ohne Vorbedingung arbeiten.

Funktioniert denn folgende Regel nicht?

<ON_SAVE>

    <WITH>

        <NOT>

            <AND>

                <PROPERTY source="pt_title" name="EMPTY"/>

                <PROPERTY source="#global" name="TRANSLATED"/>

            </AND>

        </NOT>

    </WITH>

    <DO>

        <VALIDATION>

            <PROPERTY source="pt_title" name="VALID"/>

            <MESSAGE lang="*" text="The PAGE TITLE must not be empty!"/>

            <MESSAGE lang="DE" text="Der SEITENTITEL darf nicht leer sein!"/>

        </VALIDATION>

    </DO>

</ON_SAVE>

Viele Grüße

Michael

View solution in original post

0 Kudos
10 Replies
andre
I'm new here

> Ist das so beabsichtigt?

ja.

man koennte bspw. auch auf <ON_RELEASE/> umstellen

oder

http://www.e-spirit.com/odfs50/de/weiterfuehrende_themen/validatoren/_property___tag/translated/attr...


					
				
			
			
				
			
			
			
			
			
			
			
		

<ON_RELEASE> wäre hierfür ungeeignet, denn ein Speichern soll wirklich nur mit gepflegtem Inhalt möglich sein.

Die zweite Option war allerdings sehr hilfreich. Ich habe meine REGEL dementsprechend um eine Verbedingung erweitert und nun funktioniert es wunderbar.

<ON_SAVE>

    <IF>

         <PROPERTY source="#global" name="TRANSLATED"/>

    </IF>

    <WITH>

        <NOT>

            <PROPERTY source="pt_description" name="EMPTY"/>

        </NOT>

    </WITH>

    <DO>

        <VALIDATION>

            <PROPERTY source="pt_description" name="VALID"/>

            <MESSAGE lang="*" text="The META DESCRIPTION must not be empty!"/>

            <MESSAGE lang="DE" text="Der META DESCRIPTION darf nicht leer sein!"/>

        </VALIDATION>

    </DO>

</ON_SAVE>

0 Kudos

Alternativ kann man das Inteface de.espirit.firstspirit.service.value.ValueService implementieren. Hierzu gibt es auch ein Beispiel http://www.e-spirit.com/odfs50/de/weiterfuehrende_themen/validatoren/einfuehrung.html?community am Ende der Seite.

0 Kudos

Gibt es zu dem Modul eine Doku wie man es einsetzen kann?

0 Kudos

Vorsicht, das funktioniert nur in eine Richtung. Die Abfrage von TRANSLATED sollte nicht in der Vorbedingung erfolgen sondern Teil der Wertermittlung sein. Sonst wird das Feld beim Setzen des Hakens zwar ungültig, beim Entfernen aber nicht wieder gültig.

Siehe auch https://community.e-spirit.com/message/11561#11561

0 Kudos

Das ist korrekt, allerdings muss die Abfrage muss sowohl in der Vorbedingung als auch in der Werteermittlung gesetzt sein, sonst funktioniert es nicht.

Bei mir funktioniert es nur so:

<ON_SAVE>

    <IF>

        <PROPERTY source="#global" name="TRANSLATED"/>

    </IF>

    <WITH>

        <AND>

            <NOT>

                <PROPERTY source="pt_title" name="EMPTY"/>

            </NOT>

            <PROPERTY source="#global" name="TRANSLATED"/>

        </AND>

    </WITH>

    <DO>

        <VALIDATION>

            <PROPERTY source="pt_title" name="VALID"/>

            <MESSAGE lang="*" text="The PAGE TITLE must not be empty!"/>

            <MESSAGE lang="DE" text="Der SEITENTITEL darf nicht leer sein!"/>

        </VALIDATION>

    </DO>

</ON_SAVE>

Gruß,

Daniel

0 Kudos

Hallo Daniel,

bei mir unter v5.0.106 funktioniert es so nicht - jedenfalls nicht in allen Variationen der Reihenfolge von Benutzeraktionen - genau das war ja mein Punkt 😉

Deine Regel sorgt lediglich für ein Markieren als "ungültig / nicht speicherbar" beim SETZEN des Hakens "übersetzt" bei leeren Feld. Wenn man den Haken direkt danach wieder entfernt, bleibt die rote Markierung als "ungültig" erhalten.

Durch die Vorbedingung erfolgt eine Auswertung bzw. das "Setzen" der Gültigkeit nur wenn/solange der Haken gesetzt ist. Dazu gehört aber nicht nur das "ungültig" setzten, sondern auch das (wieder) "gültig" setzen. Genau letzteres soll auch soweit ich es verstanden habe beim Entfernen des Hakens passieren. Die Vorbedingung verhindert das aber und verwirrt dadurch wahrscheinlich den Redakteur:

Immerhin ist ein und derselbe Zustand (Kein Haken bei "übersetzt" UND leeres Feld) nun angeblich ungültig, der vorher gültig war.

Ein Speichern ist allerdings trotzdem möglich, hier scheint eine separate Validierung angestoßen zu werden mit "frischen" Gültigkeitsstati.

Dennoch sollte man das ganze für den Redakteuer konsistent gestalten (wenn rot, kein Speichern) - und dazu in diesem Fall wirklich ohne Vorbedingung arbeiten.

Funktioniert denn folgende Regel nicht?

<ON_SAVE>

    <WITH>

        <NOT>

            <AND>

                <PROPERTY source="pt_title" name="EMPTY"/>

                <PROPERTY source="#global" name="TRANSLATED"/>

            </AND>

        </NOT>

    </WITH>

    <DO>

        <VALIDATION>

            <PROPERTY source="pt_title" name="VALID"/>

            <MESSAGE lang="*" text="The PAGE TITLE must not be empty!"/>

            <MESSAGE lang="DE" text="Der SEITENTITEL darf nicht leer sein!"/>

        </VALIDATION>

    </DO>

</ON_SAVE>

Viele Grüße

Michael

0 Kudos

Hallo Michael.

Perfekt, so funktioniert es.

Ich hatte die Zeile "<PROPERTY source="#global" name="TRANSLATED"/>" nicht verneint. Daher ging es nicht.

Es dauert noch eine Weile bis ich eure Logik der "Dreifachverneinung" verinnerlicht habe. Ich Frage ja ab ob ein Feld leer ist, dann muss ich die Abfrage verneinen, die dann die Validierung anstößt wenn das Feld wirklich leer ist, das verursacht einige Knoten bei mir ...

Aber trotzdem vielen Dank für die Hilfe.

Gruß,

Daniel

0 Kudos

Hallo Daniel,

ein Tipp zur vielleicht "knotenfreieren", allgemeinen Herangehensweise:

Wenn man das ganze nicht als Ablauflogik sondern anschaulich als Zuweisung einer "Eigenschaft VALID" versteht, finde ich es einfacher (so erkläre ich es auch in den Schulungen). Das ist dann übrigens auch konsistent mit den anderen Verwendungen der dynamischen Formulare (Sichtbarkeit, Editierbarkeit usw.) und man braucht für beides nur ein einziges Denkmodell.

Anschaulich funktioniert beides dann so: Das "Ergebnis" aus dem <WITH> wird in die Eigenschaft(en) gesteckt, die man im <DO> angibt.

Mir hilft es, vorher das Ganze auf einem Zettel als Pseudo(!)code zu formulieren. Man braucht letztlich eine Ermittlung der "Eigenschaft" VALID, hier an Deinem Beispiel mal exemplarisch

pt_title.valid = ?

Oft ist es aber einfacher, zunächst zu formulieren wann etwas UNgültig ist und das dann umzuformen:

"Das Feld ist GENAU DANN ungültig wenn es leer ist UND die Seite als übersetzt markiert ist" wird dann zu

pt_title.invalid = pt_title.empty && #global.translated

mit pt_title.invalid = ! (pt.title.valid) wird daraus

<=> ! pt_title.valid = pt_title.empty && #global.translated

<=> pt_title.valid = ! (pt_title.empty && #global.translated)

Und schon hat man das, was man nur noch in Regelsyntax gießen muss. Der linke Teil entspricht dann dem <PROPERTY source="pt_title" name="VALID"> in der Validierung, der rechte dem <WITH>-Teil.

Das Ganze funktioniert auch wunderbar wenn mehrere Komponenten im Spiel sind.

Viele Grüße

Michael