marcfr
Elite Observer

Externe Datenbank anbinden -> Löschen von Datensätzen

Hallo,

wir sind gerade dabei eine externe Datenbank an FirstSpirit anzudocken ("Schema aus Datenbank erzeugen"). Das funktioniert soweit auch.

Nur haben wir festgestellt, dass es bei der folgenden Konstellation zu Problemen kommt:

- Ein Datensatz dieser externen DB wird innerhalb von FS in einer FS_LIST referenziert. Anschließend wird dieser Datensatz in der externen DB gelöscht -> Folge: In FirstSpirit bleibt eine tote Referenz zurück

=> Was könnte man tun um dieses Problem beim Löschen von Daten zu umgehen?

Viele Grüße,

Marc Friedemann

3 Replies
fyf
I'm new here

Hi Marc,

Ich habe für "Umgezugehen" zwei Richtungen verstanden. Dafür sind meines Vorschläge unten, wie ich es bei mir auch implementiert habe.

I / "Umzugehen" im Sinne von Ersetzen?

ALTERNATVE 1: Implementierungen von FS Skripten oder FS Modul Funktionalitäten

um das Problem in dieser Richtung umzugehen, brauchst du einen "MusterDatenSatz", welche dann automatisch referenziert wird als Ersatz , in dem Feld, wo das originales referenziert war.

Das heißt, falls sobald der Link Tot wird, ein automatische Skript oder im  externen Modul eingebaute Funktionalität soll dafür sorgen, dass der Link implizit zu dem "MusterDatensatz" referenziert und fregigegeben wird. Achten auch auf den Inhalt dieser Datensatz, damit wenn drauf stoff, dass eine explizite Nachricht drauft steht.

Danach eine zweite Funktionalität bauen, die eine Meldung signalisiert, an der Redakteur der Seite in dem diese FS-List sich befindet, mit einen Hinweis, wie zum Beispiele "Das Datensatz mit dem Titel xyz und mit ID 1234 ist vom DB entfernt wurde, und wird in Ihre Seite ersetz durch 'MusterDatensatz'. Irgendwelche Aktion unternehmen" zb.

Also 2 Aktionen zu implimentieren + 1 Aktion für den Redakteur :

1) Datensatz impliziut automatisch mit einem "MusterDatensatz" ersetzen (implizites Ersetzen + implizite freigabe)

2) Signaliserung oder Meldung an Redakteur oder Admin oder System , usw... damit die Seite angepasst wird.

3) Übernimmt dann der Redakteur für die Seite 

ALTERNATV 2: In Richtung DB . Implementierung von einem Trigger + erweiterung der DB für wo was verwendet wird

Hier sieht fast wie alternative 1, nur mit der unterschied, dass sollte ein noch verwendete DAtensatz gelöscht werden, welche in der Nutzung ist, dann musst ein Kontroll erst automiatsch ergeben, weche dafür sorgt, dass die Referenzierung alle wegfallen, entweder automatisch oder über Meldungen , ganz unterschieldich...

II / Umzugehen im Sinne von vormeiden, dass das Datensatz auch im FS gelöscht wird?

Dann hilft auch die Alternative 2.

0 Kudos
marza
I'm new here

Hallo Marc,

ich würde ja eine Art Puffertabelle empfehlen, die eine Kopie der echten Datensätze enthält. Puffertabelle wird über Trigger an der Original-Tabelle gefüllt.

Wenn die Datensätze gelöscht werden, wird in der Puffertabelle der Datensatz nicht wirklich gelöscht, sondern nur als gelöscht geflaggt. Das kann man in FirstSpirit abfragen und den Datensatz nicht mehr anzeigen.

Alternativ sollte man sich überlegen, ob ein echtes Löschen überhaupt sinnvoll ist. Ich kenne etliche Projekte bei denen man auf das physische Löschen komplett verzichtet hat, genau aus dem Grund heraus: Jemand löscht aus Versehen einen Datensatz und man müsste jetzt das Backup von gestern herauskramen und verliert die Änderungen der letzten 24 Stunden.

Alternativ hinsichtlich des Nicht-Anzeigen absichtlich einen Generierungsfehler im Templating (#global.scheduleContext.logError("...") reicht hier) in FirstSpirit erzeugen mit der Nachricht dass ein externer Datensatz nicht mehr existent ist. Dann muss ein Redakteur das manuell fixen und das Deployment erneut starten.

Grüße Marian

pavone
I'm new here

Hallo Marc,

benötigst Du noch weitere Hilfe oder haben Dir die Antworten von Fabrice und Marian bereits geholfen? In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.

Viele Grüße

Tim

0 Kudos