enhancement
major
minor
defect
critical
major
minor
major
#30063
Verwaltung der React-Benutzeroberfläche: Personen (Kontakte mit optionaler Anmeldung) in einem Formular
Split off #30047. Follow-up to #29767, related: #29108.
Context
The administration of the React UI is admin/admin.view.xml of tl-layout-view; feature modules contribute sections through same-path overlays (developer article view-layer/overlays). The administration of com.top_logic.contact exists in the classic UI only.
In the React account administration (admin/access-control/accounts.view.xml), the contact data of a user cannot be edited: first and last name of tl.accounts:Person read through to the contact as derived (read-only) attributes, and email, title and phone numbers are not offered at all.
Feature
In an application with com.top_logic.contact, the React administration has one page for people: a person contact with an optional login. All attributes of a user - contact data and login data - are edited in one form with one edit mode.
Lösung
- Neues allgemeines Formularelement <object-fields attribute="..."> (com.top_logic.layout.view): innerhalb eines <form> enthält es Felder für das Objekt, auf das eine einwertige Referenz des Formularobjekts zeigt (vorwärts oder rückwärts). Es ist ein FormParticipant mit eigenem Overlay des referenzierten Objekts im Bearbeitungsmodus des Formulars: Dirty-Status, Validierung, Rückfrage bei ungespeicherten Änderungen und Speichern laufen über das Formular, in einer Transaktion.
- Seite "Personen" (Konfiguration in com.top_logic.layout.view.contact, ersetzt in einer Anwendung mit Kontakten die Seite "Konten" per Overlay): Tabelle der Personenkontakte; ein Formular auf dem Contacts:PersonContact (Titel, Vorname, Nachname, E-Mail, Telefonnummern, Fax, Bemerkungen) mit <object-fields attribute="account"> für die Anmeldedaten. Die Firma wird nicht angezeigt. Firmenkontakte und Organisationseinheiten werden nicht portiert.
- Login hinzufügen / entfernen außerhalb des Bearbeitungsmodus: "Login hinzufügen" legt das Konto über den Anlegedialog der Konten an und übergibt den Kontakt als initialData; "Login entfernen" löscht das Konto, der Kontakt bleibt. Ein Kontakt mit Login kann erst nach dem Entfernen des Logins gelöscht werden. Die übrigen Kontobefehle (Passwort zurücksetzen, MFA, ...) der Basisseite bleiben erhalten.
- Kontoerzeugung mit Anfangsdaten (com.top_logic): Person.create(..., TLObject initialData) und PersonManager.initUser(Person, TLObject initialData); ContactPersonManager verbindet einen übergebenen Kontakt ohne Konto direkt mit dem neuen Konto (sonst wie bisher die Suche über den Login-Namen). Damit entsteht nie ein zweiter Kontakt, auch nicht, wenn mehrere Kontakte denselben früheren Login-Namen tragen.
- Benannte Befehle in View-Overlays: Die Befehlslisten von Panels (und allen Elementen auf Basis von CommandCarrierElement) und Formularen werden beim Zusammenführen von Views über das Attribut name zugeordnet; ein Overlay kann einen benannten Befehl entfernen, ersetzen oder ergänzen.
Migration
Java-Code einer Anwendung, der die Befehlsliste einer Konfiguration von CommandCarrierElement oder FormElement (getCommands()) liest oder setzt, erhält statt List<PolymorphicConfiguration<? extends ViewCommand>> eine List<ViewCommand.Config>. .view.xml-Dateien müssen nicht geändert werden.
Verification
tl-demo-react (/view/, root / root1234), Administration → Access control → People: edit name, email, groups and language in one edit mode; add a login to a contact, log in with it, remove the login (contact remains), add it again (same contact).