enhancement
major
minor
defect
critical
major
minor
major
#30061
React UI: Letzte Änderungen des Benutzers mit Rückgängigmachen eines Commits (Benutzermenü)
Abspaltung von #30047. Folge von #29767, siehe auch: #29108.
Hintergrund
Die klassische Benutzeroberfläche bietet „Meine letzten Änderungen“ (com.top_logic.model.search, admin/myLatestChanges/*): die eigenen letzten Commits des Benutzers mit ihren Änderungen sowie das Rückgängigmachen eines Commits. Die React-Benutzeroberfläche verfügt über die Änderungssatz-Tabelle unter „Administration → Überwachung → Änderungen“ und den dazugehörigen Detaildialog (admin/monitoring/revision-details.view.xml), jedoch weder über eine benutzerspezifische Ansicht noch über eine Rückgängig-Funktion.
Funktion
Das Benutzermenü der React-Benutzeroberfläche erhält den Eintrag „Meine letzten Änderungen“: einen Dialog, der die letzten 30 Commits des aktuellen Benutzers auflistet (Revision, Datum, Meldung, Angabe, ob der Commit rückgängig gemacht wurde). Durch Anklicken eines Commits werden dessen Details geöffnet; dort kann er rückgängig gemacht werden („Änderung rückgängig machen“) oder, sobald er rückgängig gemacht wurde, wiederhergestellt werden („Änderung wiederherstellen“). Die gleichen Befehle sind in den Details unter „Administration → Überwachung → Änderungen“ verfügbar. Nach einer Rückgängigmachung werden die Details geschlossen und die Liste neu berechnet.
Lösung
- Gemeinsame Rückgängigmachungslogik (com.top_logic.element, ChangeSetReverter): revertTarget(ChangeSet) folgt der Kette der Rückgängigmachungen eines Commits (Commit → Rückgängig → Wiederherstellen → Rückgängig …) bis zu ihrem Ende, dem aktuell gültigen Änderungssatz, sodass ein Umschalten einen Änderungssatz niemals zweimal rückgängig macht; revert(KnowledgeBase, ChangeSet, force) macht es in einer eigenen Transaktion rückgängig und führt bei Konflikten einen Rollback durch, sofern nicht erzwungen; isUndone(ChangeSet) gibt an, ob das Ende der Kette ein „Undo“ ist. Die klassischen Befehle RevertCommandHandler, UndoCommandHandler und RedoCommandHandler nutzen dies.
- Änderungsprotokoll (ChangeLogBuilder): Ein „Redo“ wird als „revertedBy“ des „Undo“ verknüpft, das es rückgängig macht (bisher wurde nur ein „Undo“ mit seinem Original verknüpft). Das Präfix „Reverted: …“ wird nur angezeigt, solange ein Commit rückgängig gemacht wird, nicht mehr, nachdem er wiederhergestellt wurde.
- TL-Script-Funktion changeSetUndone(changeSet) (com.top_logic.model.search): Gibt an, ob ein Commit im aktuellen Zustand rückgängig gemacht ist. Legt fest, welche der Optionen „Änderung rückgängig machen“ / „Änderung wiederherstellen“ angeboten wird und ob die Spalte „Reverted“ angezeigt wird – in den React-Ansichten und im klassischen Bereich „Meine letzten Änderungen“, der bisher für einen bereits wiederhergestellten Commit erneut „Änderung wiederherstellen“ anbot.
- Ansichtsaktion <revert-change-set> (com.top_logic.layout.view): Macht den als Eingabe erhaltenen Commit rückgängig. Bei Konflikten mit späteren Commits (Option „check-conflicts“, standardmäßig aktiviert) wird die Rückgängigmachung zurückgenommen und die Konflikte werden in einem Bestätigungsdialog aufgelistet; sie wird erst nach Bestätigung angewendet. Dokumentiert im Entwicklerartikel view-layer/commands.
- Ansichten: admin/monitoring/revision-details.view.xml erhält die Befehle „Änderung rückgängig machen“ / „Änderung wiederherstellen“; sie schreibt einen Kanal-Reload, den die aufrufenden Dateien (revision-monitor.view.xml, recent-changes.view.xml) einbinden, um ihre Tabelle neu zu berechnen. „recent-changes.view.xml“ ist der Dialog „Meine letzten Änderungen“ (changeLog(), gefiltert nach dem aktuellen Benutzer); „user-menu.view.xml“ öffnet ihn aus der Gruppe „Konto“.
Überprüfung
tl-demo-react (/view/, root / root1234): Bearbeite ein Objekt, öffne das Benutzermenü → „Meine letzten Änderungen“, öffne den Commit, mache ihn rückgängig, wiederhole ihn, mache ihn erneut rückgängig; eine spätere, widersprüchliche Änderung desselben Attributs führt zu einem Bestätigungsdialog, in dem der Konflikt aufgeführt wird. Tests: TestChangeSetReverter.