In diesem Beitrag wird gezeigt, wie vor dem Speichern verhindert werden kann,
dass bestimmte Werte wie z.B. E-Mail-Adressen oder Titel doppelt erfasst werden.
Klicken Sie "OK" und speichern Sie die Applikation mit der Tastenkombination STRG + S.
Ordnen Sie die Applikation in der Menüstruktur des Portals ein und öffnen Sie
sie dann im Browser.
Geben Sie auf der Eingabeseite die Titel
Titel 1
Titel 2
Titel 2
ein.
2. Datei custom.js anpassen
Für die Anpassung der custom.js führen Sie bitte folgende Schritte durch:
Bitte beachten Sie, dass eventuell vorhandene Anpassungen in der
getconflictBySysidentAndObject.vm in Ihrem Portalverzeichnis
beim Ersetzen verloren gehen.
4. Neustart Portalserver
Starten Sie nach dem Kopieren der Dateien den Portalserver neu.
5. Sysident anlegen
Für das Datenbankfeld Titel, das in unserem Beispiel
geprüft werden sollen, wird nun ein in der Datengruppe eindeutiger sysident vergeben.
Öffnen Sie den Eigenschaftendialog des Titel-Datenbankfeldes mit einem Doppelklick
und wechseln Sie dort auf den Reiter Expert. Wenn dieser Reiter nicht sichtbar ist, aktivieren Sie bitte noch die
Optionen für Experten.
Klicken Sie hier auf "Attribut hinzufügen". Tragen Sie in der Spalte
"Attribut" das Attribut sysident und in der Spalte "Wert" einen innerhalb der Datengruppe
eindeutigen Namen für das Attribut (z.B. my-title) ein.
Bitte beachten Sie die Kleinschreibung beim Attribut sysident.
Klicken Sie "OK".
6. JavaScript verfassen
Wechseln Sie nun auf die Eingabeseite und öffnen Sie den Eigenschaftendialog der
OK-Schaltfläche, die den Datensatz speichert, mit einem Doppelklick.
Wechsen Sie auf den Reiter Skript und klicken Sie dort auf
"JavaScript für Desktop bearbeiten". Kopieren Sie das hier folgende Skript in den Skript-Editor.
function checkTitle()
{
var l_oCheckUpResult = checkUpForDatabaseConflictBySysidentAndObject("Name des Sysidents", getElement("<GUID des Eingabefeldes>"), false);
if(l_oCheckUpResult.bError)
{
alert("Es ist ein Fehler aufgetreten!\n"+l_oCheckUpResult.iErrorId+": " + l_oCheckUpResult.strErrorDesc)
}
else
{
if(l_oCheckUpResult.bConflict)
{
// ein Konflikt ist aufgetreten
// Möglichkeit 1: Mitteilung an Benutzer, dass Datensatz nicht gespeichert werden kann und Abbruch des Speichernvorgangs mit return false;
//alert("Dieser Titel ist bereits angelegt!")
//return false;
// Möglichkeit 2: beim Benutzer nachfragen, ob trotzdem gespeichert werden soll
Check = confirm("Dieser Titel ist bereits angelegt!\nTrotzdem speichern?");
if(Check)
return true;
else
return false;
}
else
{
// es sind keine Konflikte aufgetreten
return true;
}
}
return false;
}
In der Zeile
var l_oCheckUpResult = checkUpForDatabaseConflictBySysidentAndObject("Name des Sysidents", getElement("GUID des Eingabefeldes"), false);
muss nun noch der "Name des Sysidents" (in unserem Beispiel "my-title") und die
GUID des Eingabefeldes eingesetzt werden.
Die GUID des Eingabefeldes Titel können Sie ganz einfach ermitteln, wenn Sie im
rechten Bereich des Editors auf den Reiter "Applikationsstruktur"
wechseln. Klicken Sie anschließend "OK", um das Skript zu speichern und den Editor zu schließen.
Hier kann die JavaScript-Function nun dem Schaltflächen-Ereignis "onclick"
zugeordnet werden. Klicken Sie dazu auf
"Skriptaufruf hinzufügen". Klicken Sie nach der Zuordnung auf "OK".
Klicken Sie auch hier auf "OK" und speichern Sie die Applikation.
Wird nun ein Titel im Browser doppelt angelegt, erhält der Anwender eine entsprechende Meldung.
Bitte beachten Sie, dass diese Konfliktabprüfung nur funktioniert, wenn die entsprechenden
Datensätzen nicht im selben Millisekunden-Bereich angelegt werden.