mseyfarth
Elite Observer

Eingabe Validierung mithilfe der Datenquellen

Jump to solution

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

0 Kudos
1 Solution

Accepted Solutions

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

View solution in original post

0 Kudos
6 Replies
StefanSchulz
I'm new here

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

0 Kudos

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.

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

0 Kudos

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.

0 Kudos

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

0 Kudos

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 Smiley Happy

Gruß

Matthias

0 Kudos

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

0 Kudos