Tipps & Tricks - Dublettenprüfung

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.

1. Applikation anlegen

Legen Sie eine Applikation auf Basis der Vorlage Basisapplikation an. Den Titel können Sie mit einem Doppelklick auf den Applikationsknoten beliebig abändern.



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 ein.

2. Datei custom.js anpassen

Für die Anpassung der custom.js führen Sie bitte folgende Schritte durch:
  1. Wechseln Sie in das Portalverzeichnis external/htmlroot/include/custom.
  2. Öffnen Sie die Datei sample.js mit einem Text-Editor (z.b. Notepad ++).
  3. Kopieren Sie die Javascript-Funktion checkUpForDatabaseConflictBySysidentAndObject. Schließen Sie die Datei wieder.
  4. Öffnen Sie die Datei custom.js im selben Verzeichnis und fügen Sie die zuvor kopierte Javascript-Funktion hier ein. Speichern Sie die Datei.

3. GetconflictBySysidentAndObject.vm ersetzen

Für die Anpassung der custom.js führen Sie bitte folgende Schritte durch:
  1. Wechseln Sie in das Installationsverzeichnis orgtempl/blank/internal/system/vm/html/misc.
  2. Kopieren Sie die Datei getconflictBySysidentAndObject.vm.
  3. Wechseln Sie in das Portalverzeichnis internal/system/vm/html/misc und fügen Sie die kopierte VM-Datei hier ein. Falls die Datei hier schon vorhanden ist, ersetzen Sie diese bitte.

    Bitte beachten Sie, dass eventuell vorhandene Anpassungen in der getconflictBySysidentAndObject.vm in Ihrem Portalverzeichnis beim Ersetzen verloren gehen.

4. Sysident anlegen

Für das Datenbankfeld Titel, das in unserem Beispiel geprüft werden sollen, wird nun ein in der Datengruppe eindeutiger sysident vergeben. Blenden Sie dazu in der Applikationsstruktur die Datenfelder der Datengruppe über das Kontextmenü ein.



Ö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".

5. 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. Die Ebenen der Struktur unterhalb der Eingabeseite können mit Doppelklick eingeblendet werden. In der Formgroup finden Sie das Eingabefeld "Titel". Im unteren Bereich wird nun unter anderem auch die GUID des Eingabefeldes eingblendet. Mit einem Klick auf "GUID einfügen" wird die GUID an der im Editor markierten Stelle eingefügt. Klicken Sie "OK".



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.