Detail
#27264
Selektionskomponenten sollen ein-elementige Mengen nicht auspacken
Zur Zeit ist in Top-Logic die Philosophie, dass in Selektionskomponenten (tl:TableComponent, tl:TreeComponent, tl:TreeTableComponent und tl:GridComponent) mit Mehrfachauswahl ein-elementige und leere Selektionen besonders behandelt werden: Statt einer ein-elementigen Menge wird das "eine" Element und bei einer leeren Selektion "null" auf den Selektionskanal geschrieben.
Verbesserung
Wenn die Komponente eine Einfach-Selektion unterstützt, ist getSelected() entweder das selektierte Objekt oder null, wenn nichts selektiert ist.
Wenn die Komponente eine Mehrfach-Selektion unterstützt, ist getSelected() immer eine Collection, evtl. leer wenn nichts selektiert ist.
Code-Migration
Komponenten die die Selektion einer tl:TableComponent, tl:TreeComponent, tl:TreeTableComponent oder tl:GridComponent mit Mehrfach-Selektion als Modell haben müssen angepasst werden da die Selektion nun immer eine Collection ist.
Hier kann zB. ein tl:TransformLinkingByExpression benutzt werden. Aus einer tl:CommandHandler-Konfiguration
target="selection(<component>)"
wird
<target class="com.top_logic.model.search.providers.TransformLinkingByExpression" input="selection(<component>)" > <function><![CDATA[selection -> if ($selection.size() <= 1, $selection.singleElement(), null)]]></function> </target>
Bsp.
Im Demo sind unter Technisches Demo > Komponenten > Tabellen und Bäume Beispiele für Selektionskomponenten mit Mehrfachselektion und Einfachselektion vorhanden.
Test
TestTreeTableMultiSelection.script.xml `, `TestTreeMultiSelection.script.xml, TestTableMultiSelection.script.xml, TestGridMultiSelection.script.xml.