plamka
I'm new here

Doppelete Titel in der Datenquelle verhinden

Jump to solution

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

1 Solution

Accepted Solutions

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

View solution in original post

0 Kudos
8 Replies
mbergmann
Crownpeak employee

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

0 Kudos

Hi Michael,

von beiden.

Gruss

david

0 Kudos
mbergmann
Crownpeak employee

Hi David,

dann sollten die verlinkten (s.o.) Postings helfen (ich hatte die Links nachträglich eingefügt).

Viele Grüße

Michael

0 Kudos

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?

0 Kudos
mbergmann
Crownpeak employee

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

0 Kudos

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)

0 Kudos
mbergmann
Crownpeak employee

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

0 Kudos