Um DSGVO Anforderungen einfacher umsetzen zu können wurden im Nuclos Core ab Version 4.2022.7 einige Erweiterungen geschaffen. Diese Seite gibt eine kleine Übersicht um welche Erweiterungen es sich genau handelt, und wie diese beispielhaft eingesetzt werden können.
Nuclos Systemobjekte
Nuclos Benutzer
Benutzer können nun über die API gelöscht werden:
org.nuclos.api.provider.UserProvider#delete
Statistiken der Benutzer Sitzungen (T_AD_SESSIONS) werden mit dem neuen Systemparameter PRIVACY_DELETE_SESSIONLOG_AFTER_PERIOD (Zeitraum in Tagen) automatisch um 0 Uhr gelöscht.
Nuclos History
Welcher Benutzer für welchen Wert in einem Businessobjekt verantwortlich ist, kann in Nuclos über die Historisierungsfunktion nachverfolgt werden, sofern eingeschaltet. Die Änderungen werden in der System Tabelle T_UD_HISTORY historisiert.
Da bestimmte Attribute länger aufbewahrt werden müssen als andere, ist eine Unterscheidung nach Attributen nötig, welche im Businessobjekt Wizard am Attribut konfiguriert werden kann. Ein Eingabefeld "Anzahl Tage, nach denen die Statusinformationen anonymisiert werden" hinter der Aktivierungs-Checkbox der Historisierungsfunktion erlaubt die Steuerung.
Einmal wöchentlich Sonntags um 0 Uhr wird die Nuclos History anonymisiert. Benutzername, wie auch die Metainformationen "Erstellt von" / "Geändert von" werden dann durch ***** ersetzt.
Nuclet Businessobjekte
Datensätze bzw. einzelne Attribute können vollkommen unterschiedlicher Lösch- oder Anonymisierungsfristen unterliegen, damit ist eine individuelle Lösung pro Nuclet unumgänglich. Auch wird auf fachliche Sachverhalte wie Pflichtfeld oder nicht, Verwendung in weiterer Businesslogik wie dem Versand von Mails o.ä., Rücksicht genommen werden müssen.
Wir empfehlen die Anonymisierung von Daten innerhalb eines Jobs, ein Beispiel finden Sie am Ende dieser Seite.
Nuclos bietet über die API nun eine Änderung der Metainformationen "Erstellt von" und "Geändert von" an:
org.nuclos.api.businessobject.facade.Modifiable#setCreatedBy
org.nuclos.api.businessobject.facade.Modifiable#setChangedBy
Im Normalfall lässt Nuclos eine Änderung des "Erstellt von" nicht zu, und setzt automatisch "Geändert von" auf den aktuellen Benutzer. Erst wenn die laufende Transaktion mit
org.nuclos.api.transaction.CurrentTransaction#disableBusinessObjectMetaUpdate
markiert wird, werden bei einem Speichervorgang die neuen Werte geschrieben. Die Versionsnummer wird nicht hochgezählt. Andere parallel laufende Transaktionen sind davon nicht betroffen.
Vorhandene Businesslogik könnte eine Speicherung verhindern, oder zu ungewollten Schnittstellenaufrufen o.ä. führen. Um dem entgegen zu wirken kann die Business Rule Engine für die laufende Transaktion deaktiviert werden:
org.nuclos.api.transaction.CurrentTransaction#disableRuleExecution
Zusätzlich wird auch die Pflichtfeldprüfung des Nuclos Kerns deaktiviert, ähnlich dem Direktimport, da mögliche statusabhängige Pflichtfelder, welche erst nachträglich eingeführt worden sind, eine Änderung an älteren Datenbeständen sonst verhindern würden. NotNull Constraints der Datenbank bleiben unangetastet und sind immer aktiv.
Äußerste Vorsicht bei Verwendung dieser Funktion ist geboten. Fehldatenbestände könnten sonst die Folge sein!
Große Datenmengen, gerade bei der Einführung solch einer Implementierung, werden sicherlich den Speicher des Application Servers stark belasten, wenn nicht sogar über Gebühr (OutOfMemory). Hier helfen die neuen API Methoden der Query:
org.nuclos.api.businessobject.Query#setOffset
org.nuclos.api.businessobject.Query#setChunkSize
Bekannt aus dem Datenbank und SQL Umfeld.
Eine Query kann damit auf mehrere Chunks aufgeteilt und so Stück für Stück verarbeitet werden. Aber Achtung, die Transaktion in der Datenbank, sofern nicht ebenfalls aufgeteilt, wächst bis zu einem Commit immer weiter an.
Um nicht jedes Businessobjekt einzeln zu implementieren, und die Gefahr zu umgehen eines zu vergessen, liefert die neue Methode
org.nuclos.api.provider.BusinessObjectProvider#getAllModifiableBusinessObjectClassNames
einen generischen Ansatz alle oder zumindest einen großen Teil gesammelt zu verarbeiten.