daniel2
I'm new here

WebEdit5: Dyn. Formulare und Verhalten des JavaClients

Jump to solution

Hallo Community,

ich versuche mit folgender Regel in Abhängigkeit zum ausgewählten Wert einer CMS_INPUT_RADIOBUTTON-Komponente (ptEventType) die CMS_INPUT_TEXT-Komponente (ptTitle) required zu setzen, bzw. nicht (wenn ptEventType = child, dann nicht required).

Mit folgender Regel klappt das rein visuell im WebEdit perfekt (keine Warnhinweise mehr) - beim Abspeichern kommt allerdings die Meldung, dass nicht gespeichert werden konnte, da ptTitle nicht ausgefüllt wurde. Der JavaClient setzt das Feld (natürlich) immer auf required.

<ON_SAVE>

    <IF>

        <EQUAL>

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

          <TEXT>DE</TEXT>

        </EQUAL>

    </IF>

    <WITH>

      <OR>

        <NOT>

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

        </NOT>

        <EQUAL>

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

          <TEXT>child</TEXT>

        </EQUAL>

      </OR>

    </WITH>

    <DO>

      <VALIDATION>

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

        <MESSAGE lang="*" text="Bitte tragen Sie eine Überschrift für diesen Artikel ein."/>

      </VALIDATION>

    </DO>

  </ON_SAVE>

Sobald ich den IF-Passus gegen folgenden ersetze, reagiert der WebEdit wie er soll und im JavaClient ist das Feld ptTitle wie erwartet nicht mehr required.

<IF>

   <AND>

      <EQUAL>

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

       <TEXT>DE</TEXT>

    </EQUAL>

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

  </AND>

</IF>

Die gewünschte Lösung wäre, dass JavaClient und WebClient beide abhängig von ptEventType ptTitle required setzen. Bekomme ich das irgenwie hin?

Danke im Voraus,

beste Grüße,

Daniel

0 Kudos
1 Solution

Accepted Solutions

Hi Daniel,

Argl. Lesen hilft. Jetzt sehe ich auch erst das Problem Smiley Happy

Du benutzt ja einen Radiobutton. Und der Wert eines Radiobuttons ist natürlich kein Text sondern eine Option. Daher schlägt ein Vergleich mit einem Text immer fehl. In Webedit funktioniert's, weil dort technisch bedingt eine Zeichenkette als Wert verwendet wird.

Richtig ist die Verwendung der Eigenschaft ENTRY statt VALUE (gilt übrigens auch für Combobox). Allerdings nur dann, wenn der Wert nicht aus der Datenbank geladen wird (dann hättest du verloren).

Und als Bonbon: deine Regel vom Anfang stimmt dann. Smiley Happy

Gruß

Stefan

View solution in original post

0 Kudos
13 Replies
MichaelaReydt
Community Manager

Hallo,

ich bin mir nicht sicher, ob ich das geschilderte Problem richtig verstanden habe.

Zur Erklärung für mich:

Es existieren  die zwei Eingabekomponenten "ptEventType" (Radiobutton) und "ptTitle" (Textzeile).

Die Regel soll folgendes erwirken?

* Radiobutton nicht aktiviert -> Textzeile muss gefüllt werden

* Radiobutton aktiviert -> Textzeile muss nicht gefüllt werden

Stimmt das so?

Ich hab das jetzt nur mit zwei CMS_INPUT_TEXT-Komponenten probiert. Da funktioniert die folgende Regel für beide Clients:

<RULES>

<ON_SAVE>

        <IF>

            <EQUAL>

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

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

            </EQUAL>

        </IF>

        <WITH>

            <NOT>

                <AND>

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

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

                </AND>

            </NOT>

        </WITH>

        <DO>

            <VALIDATION>

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

                <MESSAGE lang="*" text="No content provided!"/>

            </VALIDATION>

            <VALIDATION>

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

                <MESSAGE lang="*" text="No content provided!"/>

            </VALIDATION>

        </DO>

    </ON_SAVE>

</RULES>

LG Michaela

0 Kudos

Hallo Michaela,

nicht ganz:

Sobald ptEventType den Wert "child" annimmt, darf ptTitle nicht leer sein.

Das funktioniert wie gesagt wunderbar im WebEdit mit der meinigen Lösung, aber nicht im JavaClient. Ich bräuchte diese Lösung allerdings auf irgendeine Art und Weise für beide Clients.

LG,

Daniel

0 Kudos

Hi Daniel,

ich mag mich ob deines Ziels täuschen, aber aktuell sagt deine Regel (if-Teil mal außen vor, denn der bestimmt nur, ob die Regel durchgeführt wird oder nicht), dass ptTitle dann valide ist, wenn es nicht leer ist oder ptEventType = child ist. Ich glaube aber, du willst ptEventType != child haben, oder?

Das wäre dann folgender Werteabschnitt:

<NOT>

  <AND>

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

    <EQUAL>

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

      <TEXT>child</TEXT>

    </EQUAL>

  </AND>

</NOT>

Regeln sollten prinzipiell in beiden Clients gleich funktionieren, ansonsten liegt möglicherweise ein Fehler vor.

Gruß

Stefan

0 Kudos

Hi Stefan,

ich will ptEventType == child haben. Smiley Happy Nur dann soll ptTitle "required" sein – sonst nicht.

ptTitle wird bei anderen Werten des Radiobuttons sogar ausgeblendet, was auch das Problem darstellen könnte.

So blende ich ptTitle aus (in Abhängigkeit eines weiteren Feldes):

<ON_EVENT>

    <WITH>     

      <OR>

        <NOT>

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

        </NOT>

        <NOT>

          <AND>

            <EQUAL>

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

              <TEXT>event</TEXT>

            </EQUAL>

            <EQUAL>

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

              <TEXT>child</TEXT>

            </EQUAL>

          </AND>

        </NOT>

      </OR>

    </WITH>

    <DO>

      <PROPERTY source="ptTitle" name="VISIBLE"/>

    </DO>

  </ON_EVENT>

Vielen Dank und Grüße zurück,

Daniel

0 Kudos

Daniel Klimsa schrieb:

ich will ptEventType == child haben. Smiley Happy Nur dann soll ptTitle "required" sein – sonst nicht.

Ja, genau das beschreibt die Logik, die ich oben angegeben habe. Smiley Wink

Vielleicht mal umgangssprachlich: ptTitle ist dann ungültig, wenn es leer ist und wenn ptEventType child ist.

Folglich gilt:

  • ist ptEventType = child und ptTitle leer, dann ist der Zustand ungültig.
  • ist ptTitle nicht leer, dann ist der Zustand gültig (egal, welchen Wert ptEventType hat)
  • ist ptEventType != child, dann ist der Zustand gültig (egal, welchen Wert ptTitle hat)

Ich vermute mal, dein eigener Denkansatz führt dich ein wenig in die Irre. Es geht in der Regel nicht um "required", sondern um die Definition, wann der Zustand (also die Kombination der Werte in den Eingabekomponenten) gültig ist und wann nicht. Das "required" kommt durch das ON_SAVE hinzu, dass nämlich nur dann gespeichert werden kann, wenn ein gültiger Zustand erreicht ist.

Hoffe, das klärt es ein wenig.

Gruß

Stefan

0 Kudos

Hi Stefan,

danke für Deine unendliche Geduld und natürlich liegst Du vollkommen richtig. 🙂

Allerdings habe ich bereits Michaela falsch geantwortet - es ist so, wie ich eingangs schrieb:

Nur wenn ptEventType == child, dann soll ptTitle nicht mit einer Fehlermeldung versehen werden - deshalb mein Lösungsansatz mit <or> (ptEventType hat mehrere Werte, bei deren Auswahl ptTitle nicht leer sein darf).

Wie muss ich die Regel schreiben, damit das so funktioniert?

Viele Grüße,

Daniel

P.S.: Ein eventueller gemeinsamer Kaffee geht dann mal auf mich. 😉

0 Kudos

Hi Daniel,

Argl. Lesen hilft. Jetzt sehe ich auch erst das Problem Smiley Happy

Du benutzt ja einen Radiobutton. Und der Wert eines Radiobuttons ist natürlich kein Text sondern eine Option. Daher schlägt ein Vergleich mit einem Text immer fehl. In Webedit funktioniert's, weil dort technisch bedingt eine Zeichenkette als Wert verwendet wird.

Richtig ist die Verwendung der Eigenschaft ENTRY statt VALUE (gilt übrigens auch für Combobox). Allerdings nur dann, wenn der Wert nicht aus der Datenbank geladen wird (dann hättest du verloren).

Und als Bonbon: deine Regel vom Anfang stimmt dann. Smiley Happy

Gruß

Stefan

0 Kudos

Hi Stefan,

wir müssen uns glaub ich alle nen Kaffee spendieren. ,-)

Danke für den Hinweis mit der zu verwendenden Eigenschaft "ENTRY" – muss ich die "TEXT"-Tags auch anpassen? Denn so komm ich nicht zum gewünschten Ergebnis, obwohl die Einträge nicht aus der DB kommen:

<ON_SAVE>

    <IF>

      <EQUAL>

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

        <TEXT>DE</TEXT>

      </EQUAL>

    </IF>

    <WITH>

      <OR>

        <NOT>

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

        </NOT>

        <EQUAL>

          <PROPERTY source="ptEventType" name="ENTRY"/>

          <TEXT>child</TEXT>

        </EQUAL>

      </OR>

    </WITH>

    <DO>

      <VALIDATION>

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

        <MESSAGE lang="*" text="Bitte tragen Sie eine Überschrift für diesen Artikel ein."/>

      </VALIDATION>

    </DO>

  </ON_SAVE>

Sorry, bin in der Doku nicht fündig geworden.

Grüße,

Daniel

0 Kudos

Das sollte so funktionieren. Bitte gib mal die FS-Versionsnummer an und poste die Definition des Radiobutton.

Nebenfrage: Wozu machst du eigentlich die Einschränkung auf DE?

Gruß

Stefan

0 Kudos