TWidmayer
Elite Observer

Regel Validierung: Absatzvorlage in Datenquelle / Übergabe Werte

Hallo zusammen,

wir haben in unserem Projekt eine Absatzvorlage "Text" mit folgender Eingabekomponente.

      <CMS_INPUT_TEXT name="st_text" allowEmpty="yes" hFill="yes" maxInputLength="40" singleLine="no">

        <LANGINFOS>

          <LANGINFO lang="*" label="black text"/>

          <LANGINFO lang="DE" label="Schwarzer Text "/>

        </LANGINFOS>

      </CMS_INPUT_TEXT>

In der Tabellenvorlage "news" gibt es das Feld "tt_title" und "tt_content"

Im FS_CATALOG "tt_content" kann die Absatzvorlage "Text" eingebunden werden.

<CMS_INPUT_TEXT name="tt_title" allowEmpty="yes" hFill="yes" singleLine="no" useLanguages="yes">

        <LANGINFOS>

          <LANGINFO lang="*" label="Title" />

          <LANGINFO lang="DE" label="Titel"/>

        </LANGINFOS>

      </CMS_INPUT_TEXT>

<FS_CATALOG name="tt_content" height="4" useLanguages="no">

        <LANGINFOS>

          <LANGINFO lang="*" label="Custom content"/>

          <LANGINFO lang="DE" label="Individueller Inhalt"/>

        </LANGINFOS>

        <TEMPLATES type="section">

          <TEMPLATE uid="text"/>

        </TEMPLATES>

      </FS_CATALOG>

Wir möchten nun, dass sofern tt_title ausgefüllt wurde (Indikator ob die News aktiv ist), dass "st_text" als Pflichtfeld validiert wird, wenn der Absatz "Text" dem Catalog hinzugefügt wird.

Ist so etwas möglich?

Laut Doku gibt es in den neusten Versionen den "FormDataValueService" um Informationen aus anderen Kontexten zu holen, allerdings komm ich mit den Bespielen nicht wirklich klar.

Hat damit schon jemand Erfahrungen gemacht und kann helfen?

Grüße

Tobias

0 Kudos
1 Reply
felix_reinhold
Returning Responder

Hi Tobias,

Problem ist hier glaube ich, dass der FormDataValueService dir natürlich den Wert aus dem Feld zurückgibt und keinen boolschen Wert, ob er gefüllt ist.

Du kannst entweder einen Workaround nutzen und den ermittelten Wert wieder in ein Textfeld schreiben und dieses dann auf EMPTY prüfen, oder du schriebst einen eigenen ValueService.

<RULE>

<SCHEDULE delay="0" id="C" service="FormDataValueService">

<PARAM name="GID">

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

</PARAM>

<PARAM name="TEMPLATE">

<TEXT>deinschema.news</TEXT>

</PARAM>

<PARAM name="FIELD">

<TEXT>tt_title</TEXT>

</PARAM>

<PARAM name="LANGUAGE">

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

</PARAM>

</SCHEDULE>

<DO>

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

</DO>

</RULE>

<RULE>

<WITH>

<OR>

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

<NOT>

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

</NOT>

</OR>

</WITH>

<DO>

<VALIDATION scope="SAVE">

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

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

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

        </VALIDATION>

</DO>

</RULE>

Der FormDataValueService ist ja keine Funktionalität, die man sich nicht vorher schon hätte alleine zusammen bauen können.

Mit dem StoreAgent / StoreElementAgent kommst du ja auch an den Datensatz, wenn du GID + Template übergibst.

Das Problem, was du wahrscheinlich aber bei beiden Lösungen haben wirst ist, dass sie vermutlich nicht auf dem aktuellen Stand des Datensatzes arbeiten. Wenn du eine Änderung an tt_title also nicht vorher speicherst werden die ValueServices auch nichts von dem neuen Wert mitkriegen.

Gruß

Felix

0 Kudos