major
#29741
anonymous-Benutzer soll per Default nicht in Personenauswahlfeldern auftauchen
Wenn man Attribute vom Typ Contacts:PersonContact in seinen Fachobjekten verwendet, wird nun standardmäßig immer auch der "anonymous"-User angeboten.
Man müsste nun bei allen Personenattributen ein Filter (Wertvorschläge) konfigurieren, der den anonymous-Benutzer ausnimmt. Ein solcher Filter sollte jedoch Standard sein, so dass man dies nicht überall selbst tun muss.
Ein Versuch, einen derartigen Filter am Typ zu konfigurieren, hat leider nicht funktioniert:
Hier bitte irgendwo einen entsprechenden Filter global als Default einbauen inklusive Datenmigration falls erforderlich.
Dies gilt z.B. auch für das Feld "Stellvertreter" in der Benutzerverwaltung oder in den persönlichen Einstellungen.
zu prüfen wären also auch Gruppenfelder, die persönliche Stellvertretergruppen nicht ausnehmen.
Ursache
Die Annotation "Wertvorschläge" (TLOptions) ist zwar auch an Typen erlaubt, wirkte dort aber nicht: AttributeOperations#getOptions(TLStructuredTypePart) las nur die Wertvorschläge, die am Attribut selbst annotiert sind. Die Vererbung von Annotationen (überschriebenes Attribut, Wertetyp des Attributs), die TLStructuredTypePart#getAnnotation sonst berücksichtigt, wurde für Wertvorschläge übergangen.
(Die im Screenshot verwendete Funktion ist zudem kein Lambda; OptionsByExpression erwartet die Form obj -> ....)
Lösung
- Wertvorschläge am Typ: Hat ein Attribut keine eigenen Wertvorschläge, gelten die des überschriebenen Attributs bzw. die am Wertetyp des Attributs annotierten. Damit lassen sich Wertvorschläge einmal am Typ festlegen und gelten für alle Attribute dieses Typs, sowohl in der klassischen als auch in der React-Oberfläche. Wertvorschläge am Attribut haben weiterhin Vorrang. In der React-Oberfläche haben außerdem die an einem Auswahl-Control konfigurierten Optionen Vorrang vor den Wertvorschlägen des Typs.
- Standard-Wertvorschläge ohne anonymen Benutzer (Modul tl-contact): Die Typen tl.accounts:Person und Contacts:PersonContact erhalten Wertvorschläge, die den anonymen Benutzer ausnehmen (Prüfung über die TL-Script-Funktion accountIsAnonymous(), unabhängig vom konfigurierten Namen; Kontakte ohne Benutzerkonto bleiben wählbar). tl.accounts:GroupMember bietet Gruppen ohne persönliche Stellvertretergruppen und Benutzer ohne den anonymen an.
- Die Wertvorschläge der Felder "Mitglieder" einer Gruppe (Group#members) und "Stellvertreter" (RepresentativeGroup#members, Benutzerverwaltung und persönliche Einstellungen) nehmen den anonymen Benutzer ebenfalls aus.
- Die Mitgliederauswahl der klassischen Gruppenverwaltung (EditGroupComponent) und die Stellvertreterauswahl von EditPersonContactComponent bauen ihre Optionen selbst auf; sie verwenden jetzt Person#allSelectable() (alle Benutzerkonten außer dem anonymen).
- Die Datenmigration Ticket_29741_hide_anonymous_in_options (Modul tl-contact) überträgt die geänderten Annotationen in bestehende Datenbanken.
Migration
- Die Datenmigration ersetzt die Wertvorschläge von tl.accounts:Group#members und tl.accounts:RepresentativeGroup#members. Wurden diese in einer Anwendung angepasst, müssen die Anpassungen nach der Migration erneut vorgenommen werden.
- Wertvorschläge, die in einer Anwendung bereits an einem Typ annotiert sind, waren bisher wirkungslos und gelten jetzt für alle Attribute dieses Typs ohne eigene Wertvorschläge. Solche Annotationen sind zu prüfen; eine Funktion in options-by-expression muss die Form obj -> ... haben.