Juncus
Returning Observer

Per Rule prüfen, ob in einer per FS_INDEX angesprochenen Datenquelle Inhalte existieren

Hallo Community,

ich bräuchte eure Unterstützung.
Wir haben News die in einer Datenquelle vorliegen und dort gepflegt werden.
Dazu gibt es eine Tabellenvorlage (News.news) unter Datenbank-Schemata zum Pflegen der Datensätze.

Diesen News soll man wiederum aus einer anderen Datenquelle Themen zuweisen können.

Diese Themen-Datenquelle wird mit einem FS-INDEX in die Tabellenvorlage zum Pflegen von News eingebunden:

Hier mal am Beispiel
<FS_INDEX name="tt_themen" hidden="no" useLanguages="no" viewMode="headers">
<LANGINFOS>
<LANGINFO lang="DE" label="Themen" description="Topics"/>
<LANGINFO lang="*" label="Topics" description="Topics"/>
</LANGINFOS>
<SOURCE name="DatasetDataAccessPlugin">
<TEMPLATE uid="NEWS.themen_news"/>
</SOURCE>
</FS_INDEX>

Wir verwenden diese Lösung (Template)  für verschiedene Projekte.

Jetzt gibt es Projekte die keine Themen in der Datenquelle eingetragen haben.
Dort soll dann auch diese Auswahlmöglichkeit von Themen gar nicht erscheinen. Also das FS_INDEX-Feld ausgeblendet werden.
Gibt es irgendeine Möglichkeit über Rules zu prüfen, ob die über FS_INDEX angesprochene Datenquelle für die Themen keine Datensätze hat und wenn es so ist das FS_INDEX-Formularelement auf unsichtbar zu stellen.

Über Idee wäre ich dankbar.

Viele Grüße v.
Ralf

0 Kudos
3 Replies
hoebbel
Crownpeak employee

Hallo Ralf,

ich fürchte, dass man das nur indirekt prüfen kann.

Ich würde einen ValueService schreiben, der ONLOCK ausgeführt wird und die Datenquelle darauf prüft, ob es darin Datensätze gibt (bzw. prüft, ob es die Datenquelle gibt). Das Ergebnis soll dieser dann in eine versteckte Eingabekomponente schreiben. Eine zweite Regel wertet diese Eingabekomponente aus und versteckt dann gegebenenfalls die FS_INDEX Eingabekomponente.

Tipp: Das Ganze kann man gut mit dem ScriptValueService ausprobieren. Den sollte man aber in der produktiven Umgebung in einen "echten" ValueService umwandeln.

Viele Grüße
Holger

0 Kudos
mbergmann
Crownpeak employee

Hallo Ralf,

in diesem Fall ist der "Umweg" über eine versteckte Eingabekomponente nicht nötig - der von Holger erwähnte (bzw. zu implementierende) ValueService könnte "direkt" in die "VISIBLE"-Property schreiben - das würde als Regel z.b. so aussehen:

<RULE when="ONLOCK">
<SCHEDULE service="DataExistsInDatasource_ValueService" id="x" delay="100">
<PARAM name="conten2Uid">
<TEXT>newstopics</TEXT>
</PARAM>
</SCHEDULE>
<DO>
<PROPERTY name="VISIBLE" source="tt_themen"/>
</DO>
</RULE>

Der entsprechende ValueService würde dann entsprechend true oder false liefern. Er könnte dazu

  1. prüfen, ob es im Projekt die entsprechende Datenquelle überhaupt gibt (sonst: false)
  2. wenn ja: Prüfen ob darin Datensätze sind

Man muss das natürlich nicht zwingend auf einem Content2 (=Datenquelle) basieren lassen, als Parameter kann man auch den Namen eines Tabellentemplates übergeben (und dann natürlich den ValueService entsprechend implementieren).

Viele Grüße

Michael

0 Kudos
Juncus
Returning Observer

@hoebbel , @mbergmann : Danke Euch für den Tip mit dem ValueService. 
Damit habe ich bisher noch nicht gearbeitet.
Schau ich mir an.

0 Kudos