Search the FirstSpirit Knowledge Base
Hallo,
ich stehe vor dem folgenden Problem und hoffe einer von Euch kann mir helfen.
Ich möchte beim Speichern von einem Datensatz in der Datenquelle prüfen ob der Titel bereits vergeben ist.
Die Umsetzung würde ich gerne mit einer RULE machen.
<RULE>
<SCHEDULE service="RecipeTitleValidator" id="rep1" delay="0">
<PARAM name="title">
<PROPERTY source="st_title" name="VALUE"/>
</PARAM>
</SCHEDULE>
<DO>
<VALIDATION>
<PROPERTY source="st_title" name="VALID"/>
<MESSAGE lang="*" text="Der Name ist bereits vergeben!"/>
</VALIDATION>
</DO>
</RULE>
Der Service RecipeTitleValidator würde wie folgt aussehen
public class RecipeValidationService implements ValueService {
@Override
public Object getValue(final SpecialistsBroker broker, final Map<String, ?> parameters) {
//TODO Prüflogik
return false;
}
}
Ich habe nur eine Frage, wie bekomme ich an den Service die aktuelle FS_ID von dem Datensatz übergeben?
Den aktuellen Datensatz muss ich für die Prüfung ja ausschließen.
Vielen Dank
Hallo David,
konntest du dein Problem mit einem höheren Delay lösen?
Wenn ja, wäre es schön, wenn du Michaels Antwort als "richtige Antwort" markierst, damit andere Benutzer mit dem gleichen Problem die Lösung leicht finden können.
Grüße,
Hannes
Hallo David,
reden wir hier vom CC, vom SA oder von beidem?
Vielleicht hilft dieses Posting (und das darin verlinkte, das die "Basis" erklärt) weiter?
Viele Grüße
Michael
Hi Michael,
von beiden.
Gruss
david
Hi David,
dann sollten die verlinkten (s.o.) Postings helfen (ich hatte die Links nachträglich eingefügt).
Viele Grüße
Michael
Hi,
vielen Dank für die Tipps. Ich habe die Regel implementiert, die ID des Datenquelleneintrags erhalte ich auch bereits.
<RULE>
<SCHEDULE delay="100" id="rep1" service="RecipeValidationService">
<CONDITION>
<PROPERTY name="FOCUS" source="titel"/>
</CONDITION>
<PARAM name="title">
<PROPERTY name="VALUE" source="titel"/>
</PARAM>
</SCHEDULE>
<DO>
<VALIDATION scope="SAVE">
<PROPERTY name="VALID" source="titel"/>
<MESSAGE lang="*" text="Der Rezepttitel ist bereits vergeben!"/>
</VALIDATION>
</DO>
</RULE>
Ich hätte noch eine letzte Frage. Ich würde gerne den Service nur beim Verlassen des FOCUS auf dem Feld titel antriggern. Geht das überhaupt?
Hi David,
nein, eine Regel nur "beim Verlassen" eines Feldes auszuführen geht nicht. Das liegt letztlich daran, dass mit den Regeln keine Events verbunden werden können sondern quasi nur "Zustände", die man abfragen kann.
Viele Grüße
Michael
Ahh OK, vielen Dank.
Das ist natürlich relativ unglücklich, beim schnellen Tippen werden dadruch die Aktionen unterbrochen.
Dadurch kommt es zu dem folgenden Fehler.
FSVersion=5.2.312.72667#3807;JDK=1.8.0_91 32bit Oracle Corporation;OS=Windows 7 6.1 x86;Date=09.03.2017 13:46:23
de.espirit.common.InterruptedError: java.lang.InterruptedException
at de.espirit.firstspirit.client.io.ServerCaller.handleCallException(ServerCaller.java:619)
at de.espirit.firstspirit.client.io.ServerCaller.call(ServerCaller.java:594)
at de.espirit.firstspirit.client.io.ServerCaller.call(ServerCaller.java:408)
at de.espirit.firstspirit.client.io.ServerCaller.doManagerCall(ServerCaller.java:508)
at de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:477)
at de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:58)
Hmm, das finde ich jetzt eher seltsam. Die FS-Version ist allerdings auch über ein Jahr alt (sonst hätte ich vorgeschlagen hier unseren TechSupport zu fragen).
Hast Du mal versucht, den delay-Parameter zu ändern?
Hallo David,
konntest du dein Problem mit einem höheren Delay lösen?
Wenn ja, wäre es schön, wenn du Michaels Antwort als "richtige Antwort" markierst, damit andere Benutzer mit dem gleichen Problem die Lösung leicht finden können.
Grüße,
Hannes