Search the FirstSpirit Knowledge Base
Hallo zusammen,
Ich möchte über Regeln eine Eingabevalidierung ermöglichen und verzweifle daran recht elegant.
Sachverhalt:
Über eine Texteingabekomponente CMS_INPUT_TEXT möchte ich prüfen ob der eingetragene Wert in einer Datenquelle gepflegt ist.
Wenn das der Fall ist, da soll der User eine Dropdown verwenden, die man über einen Radiobutton einblenden kann.
Die Ermittlung in der Datenbank, ob das eingegebenen Vorhanden ist funktioniert.
Auch das befüllen meiner Hilfsliste.
Eingabefeld
<CMS_INPUT_TEXT name="text_name" hFill="yes" singleLine="no">
<LANGINFOS>
<LANGINFO lang="*" label="Insert Text"/>
</LANGINFOS>
</CMS_INPUT_TEXT>
Hilfliste, mit der ich die Datenbank durchsuche ob der Wert vorhanden ist (später ist die hidden)
<CMS_INPUT_LIST name="hidden_list_to_determine_input">
<CMS_INCLUDE_OPTIONS type="database">
<LABELS>
<LABEL lang="*">#item.key</LABEL>
</LABELS>
<QUERY name="someQuery"/>
<TABLE>someTable</TABLE>
</CMS_INCLUDE_OPTIONS>
<LANGINFOS>
<LANGINFO lang="*" label="Is Included"/>
</LANGINFOS>
</CMS_INPUT_LIST>
Regel zur Ermittlung
<RULE>
<WITH>
<PROPERTY name="VALUE" source="text_name"/>
</WITH>
<DO>
<PROPERTY name="someQuery" source="hidden_list_to_determine_input"/>
</DO>
</RULE>
Ich habe jetzt jedoch das Problem, dass ich die Validierung meiner Text-Eingabe nicht hin bekomme.
Über folgende Regel
<RULE>
<WITH>
<LESS_THAN>
<PROPERTY name="SIZE" source="hidden_list_to_determine_input"/>
<NUMBER>1</NUMBER>
</LESS_THAN>
</WITH>
<DO>
<VALIDATION scope="SAVE">
<PROPERTY name="VALID" source="text_name"/>
<MESSAGE lang="*" text="This key is already defined in the drop down located in other tab....."/>
</VALIDATION>
</DO>
</RULE>
Funktioniert die Validierung im Grunde, aber ich muss explizit in der Dropdown von "hidden_list_to_determine_input" den ermittelten Wert auswählen.
Die Regel greift nicht von alleine.
Zudem bleibt die Fehlermeldung wenn ich jetzt einen Buchstaben lösche...
Hatte schon mal jemand diesen Fall und wie kann man den lösen?
Bei Fragen einfach Fragen
FS Version 12-2019
Gruß
Matthias
Hi Matthias,
ja, das sollte damit möglich sein. Wenn der ValueService false liefert, kann dies der Validitätsprüfung für den Text zugeführt werden.
So ein Test funktioniert aber nur in interaktiven Situationen (Formularbearbeitung). Dürfte für die andere Variante aber auch gelten.
Beste Grüße
Stefan
Hi Matthias,
mir ist nicht ganz klar, was die erste Regel tun soll. eine Eigenschaft "someQuery" wird dort sicherlich nicht gefunden werden (Kopierfehler?).
Ansonsten klingt mir dein Anwendungsfall eher nach dem Einsatz eines ValueService. Schau mal in der Doku unter "SCHEDULE" nach, eventuell hilft dir das weiter.
Beste Grüße
Stefan
Hallo Stefan,
die Eigenschaft "someQuery" funktioniert natürlich nicht und sollte auch nur die Art und Weise repräsentieren.
Die Query, die ich gebaut habe funktioniert an sich.
Auf welche Daten kann ich im ValueService zugreifen?
Ich muss einerseits eine Eingabekomponente (CMS_INPUT_TEXT) auslesen und diese mit Werten aus einer Datenquelle abgleichen.
Kann ich auf Datenquellen und ggf. Queries in einem ValueService zugreifen?
Laut Doku sieht es nämlich nicht danach aus.
- Innerhalb einer ValueService-Implementierung können Werte aus FirstSpirit-Eingabekomponenten verwendet werden. Unterstützt wird diese Funktionalität für die Eingabekomponenten:
- Werte komplexer Eingabekomponenten (z. B. FS_DATASET, FS_REFERENCE) können innerhalb einer ValueService-Implementierung nicht verwendet werden.
Vielleicht ist auch mein Ansatz nicht korrekt.
Derzeit prüfe ich über eine Query ob der Wert in meiner Datenquelle vorhanden ist.
Diesen Wert setzte ich in eine CMS_INPUT_LIST <-- Liste wird korrekt befüllt.
Dann möchte ich über eine Regel ermitteln, ob sich in der Liste ein Wert befindet.
Das mache ich mit einer Größenermittlung der Liste über Size. Wenn sich etwas in der Liste befindet, soll automatisch die Validierung zuschlagen.
Dieses Vorgehen funktioniert aber nicht. Bzw. die Regel greift nur, wenn ich den ermittelten Wert der CMS_INPUT_LIST aktiv auswähle.
Gruß
Matthias
kleiner Hin weis:
die CMS_INPUT_LIST ist nur eine Hilfs-Eingabekomponente, dass ich eine Query für die Ermittlung überhaupt verwenden kann.
Ich kann hier auch auf Alternativen ausweichen.
Hi,
ja, wichtig wäre mir hier, welches Ziel du mit dieser Aktion erreichen möchtest.
Einen ValueService kann man mit den Werten aus den genannten Komponenten (und eigenen Werten) füttern (als Parameter übergeben). Innerhalb des Services hast du Zugriff auf einen SpecialistsBroker und somit quasi die gesamte FirstSpirit Projektwelt. Rückgabewert könnte je nach Zweck ein Boolean sein, den du im Toggle speicherst (oder so ähnlich). Wenn es ein Datensatz sein soll, kann man über die SELECT-Eigenschaft bspw. bei CMS_INPUT_LIST einen Eintrag auswählen.
Beste Grüße
Stefan
Hallo Stefan,
das gewünschte Ergebnis soll sein, dass meine Freitexteingabe aus CMS_INPUT_TEXT einen Fehler wirft, wenn in einer Datenquelle genau dieser Wert vorkommt.
im Pseudocode:
if(textEingabe.equals(someKeyFromDataBase){
return true;
}else{
return false;
}
CMS_INPUT_TEXT --> Wirft Fehlermeldung mit Aussage: Dieser Key existiert bereits. --> speichern nicht möglich
Wenn ich das mit dem ValueService schaffe, ist für mich das Thema geklärt
Gruß
Matthias
Hi Matthias,
ja, das sollte damit möglich sein. Wenn der ValueService false liefert, kann dies der Validitätsprüfung für den Text zugeführt werden.
So ein Test funktioniert aber nur in interaktiven Situationen (Formularbearbeitung). Dürfte für die andere Variante aber auch gelten.
Beste Grüße
Stefan