Verbesserung
Top-Thema
Detail
Wichtig
Detail
Top-Thema
#25647
Mehrfachbeziehungen zwischen Komponenten
Aktuell kann ein Komponentenkanal immer nur mit einem anderen Kanal verknüpft werden. Besser wäre es, wenn man bei der Auswahl eines Komponenten-Kanals meherere Kanäle mit diesem verknüpfen könnte und somit ein zusammengesetztes Modell erzeugen könnte.
Wichtig, wenn z.B. eine Werteliste aus mehreren Selektionen in unterschiedlichen Komponenten berechnet werden muss.
Anwendung
In-App-Konfiguration bietet jetzt für die Komponentenverknüpfung zwei weitere Optionen "Kombination" und "Transformation" an. Hierüber können die Werte mehrerer Eingangskanäle zu einem Listenwert kombiniert werden,
oder ein Wert eines Eingangskanals über eine Funktion transformiert werden.
Die XML-Konfigurations-Syntax für Kombination ist:
#!xml <model class="com.top_logic.layout.channel.linking.impl.CombineLinking"> <channel name="selection"> <target name="com.top_logic.demo/technical/components/combiningChannel/attributeChecklistMultiSelector.layout.xml#Selector"/> </channel> <channel name="selection"> <target name="com.top_logic.demo/technical/components/combiningChannel/attributeChecklistSingleSelector.layout.xml#Selector"/> </channel> </model>
Die XML-Konfigurations-Syntax für Transformation ist:
#!xml <model class="com.top_logic.model.search.providers.TransformLinkingByExpression" function="x -> $x.get(`DemoTypes:A#singleStructure`)" input="selection(com.top_logic.demo/technical/components/transformingChannel/asTable.layout.xml#Table)" />
Code-Migration
Der "LayoutRelationManager" ist entfallen. Komponentenevents werden direkt über Verknüpfung von Komponentenkanälen zugestellt.
- LayoutComponent.beforeModelSet(...) ist enfallen. Es muss stattdessen afterModelSet(...) verwendet werden.
- Methoden LayoutComponent.changedByXXX() sind ersatzlos entfallen.
- Das Interface ValidationListener und der Konfigurierbarkeit in LayoutComponent ist enfallen. Stattdessen muss in einer Ableitung der Komponente doValidatModel(...) überschrieben werden.
- Die Methoden receiveModelXXXByYYY(...) in LayoutComponent sind entfallen. An einem Komponentenkanal kann stattdessen ein ChannelListener oder ChannelValueFilter registriert werden.
- Komponenten, die das Interface Selectable implementieren dürfen dessen Default-Methoden für getSelected() und setSelected() nicht mehr überschreiben. Ebenfalls darf die Methode fireSelection(...) von LayoutComponent nicht mehr gerufen werden. Ihre Funktionalität ist entfallen. Eine neue Selektion wird ausschließlich über den Aufruf von Selectable.setSelected(...) angekündigt. Diese wird automatisch durch den entsprechenden Komponentenkanal erledigt.
- Die Möglichkeit, Komponentenmodelle bei Empfang in einer Komponente zu transformieren ist zuammen mit der Schnittstelle ModelTransform und allen Konfigurationsmöglichkeiten entfallen. Entsprechende Funktionalität muss über einen TransformingChannel abgebildet werden.
- Der Hook LayoutComponent#getInitialModel() ist enfallen. Stattdessen muss ein ModelProvider konfiguriert werden, der das Initialmodell berechnet.
- Eine externe Relations.xml-Datei wird nicht mehr unterstützt. Alle Komponentenbeziehungen müssen in bei der Komponentendefinition angegeben werden.
- Ein Formular hat keinen Selektionskanal mehr. Statt model="selection(MyForm) muss jetzt model="model(MyForm) geschrieben werden.
- Die Konfigurationsoptionen supportsHistoric und showCurrent in tl:LayoutComponent sind entfallen. Komponenten zeigen genau die Modelle an, die sie erhalten, näheres regelt u.U. ein tl:ModelBuilder. Die Transformation eines historischen Modells in ein aktuelles muss über eine Transformation auf dem Modell-Kanal realisiert werden.
Test
- /com.top_logic.demo/src/test/com/top_logic/demo/scripted/layout/channels/TestCombiningChannel.script.xml
- /com.top_logic.demo/src/test/com/top_logic/demo/scripted/layout/channels/TestTransformingChannel.script.xml