FirstSpirit bietet verschiedene Eingabekomponenten an, mit denen Datensätze referenziert werden können, unter anderem auch Eingabekomponenten, mit denen mehrere Datensätze referenziert werden können, z.B. FS_LIST oder FS_INDEX.
In diesen Eingabekomponenten kann die Reihenfolge der referenzierten Datensätze definiert werden, was den Eindruck erweckt, dass diese Reihenfolge auch bei der Ausgabe berücksichtigt werden sollte.
Dies ist aber nicht in allen Fällen korrekt und hängt davon ab, wie die Daten gespeichert werden. Der Hauptunterschied in den verschiedenen Speicherarten besteht darin, dass die Datensatzreferenzen entweder im Persistenzformat der Eingabekomponente gespeichert werden (dies ist der Fall in der Inhalte-Verwaltung, den Metadaten oder auf einer Tabellenvorlage, wenn die Eingabekomponente auf eine Spalte vom Typ FirstSpirit_Editor gemappt wird) oder über eine Fremdschlüsselbeziehung (dies ist der Fall, wenn die Eingabekomponente auf einer Tabellenvorlage genutzt wird und auf eine Fremdschlüsselbeziehung gemappt wird).
Daten in der Eingabekomponente gespeichert
Wenn die Datensatzreferenzen im Persistenzformat der Eingabekomponente gespeichert werden, verhält sich alles wie erwartet. Die Reihenfolge der Ausgabe entspricht der Reihenfolge in der Eingabekomponente.
Daten über eine Fremdschlüsselbeziehung gespeichert
Etwas anders sieht es aus, wenn die Eingabekomponente auf eine Fremdschlüsselbeziehung gemappt wird. Dann wird in der Datenbank nur hinterlegt, dass die Datensätze entsprechend verknüpft sind, was den Vorteil hat, dass dieser Verknüpfung normalerweise in beiden Richtungen gefolgt werden kann, aber den Nachteil hat, dass es keine vorgegebene Reihenfolge gibt.
Wenn man sich das Ganze genauer ansieht, muss man zwischen den drei Typen der Fremdschlüsselbeziehungen unterscheiden.
1:1 Beziehungen
Hier besteht kein Problem, da ja immer nur ein Datensatz mit genau einem anderen Datensatz verknüpft werden kann. Verknüpft man einen Datensatz zweimal, so löst man automatisch die erste Verknüpfung. Da es nie mehr als einen verknüpften Datensatz geben kann, gibt es auch kein Problem mit irgendwelchen Reihenfolgen.
N:M Beziehungen
Hier können beliebig viele Datensätze einer Tabelle mit beliebig vielen Datensätzen einer anderen (oder sogar derselben) Tabelle verknüpft werden. Auch dieser Fall ist relativ einfach - es gibt keine sinnvolle Möglichkeit, hier eine Reihenfolge festzulegen. Die Daten werden mehr oder weniger zufällig von der Datenbank zurückgeliefert. Man kann versuchen, eine manuelle Sortierung zu erreichen, indem man auf den Datensätzen eine entsprechende Spalte (z.B. eine Zahlenspalte) definiert und die Datensätze nach dieser sortiert zurückgibt. Das ist aber ein sehr fragiler Ansatz, da die Sortierung für alle verknüpften Datensätze passen muss, so dass an dieser Stelle hier nicht weiter darauf eingegangen wird.
Empfehlung: Wenn die Rückrichtung nicht benötigt wird, dann sollte in der Eingabekomponente selber gespeichert werden. Wenn die Rückrichtung benötigt wird und die Datensätze nur einmal referenziert werden, dann sollte eine Zwischentabelle verwendet werden, die jeweils 1:N verknüpft wird und die Sortierung über den Persistenceindex (siehe unten) sollte verwendet werden.
Tipp: Ist beispielsweise eine alphabetische Sortierung gewünscht, so kann diese bei der Ausgabe mittels .sort(x->x-<Sortierspalte>) erreicht werden (siehe Online Dokumentation, Abschnitt Vorlagenentwicklung/Vorlagensyntax/Ausdrücke/Abbildungsausdrücke)
1:N Beziehungen
Hier können beliebig viele Datensätze mit einem Datensatz verknüpft werden. Unter bestimmten Bedingungen (die Datensätze dürfen nur einmal referenziert werden), ist eine automatische Sortierung möglich. Diese ist am Beispiel einer Bildergalerie in der Online Dokumentation beschreiben (Weiterführende Themen/Medien-Galerien) [über das Attribut <PERSISTENCEINDEX>order_index</PERSISTENCEINDEX> in der FS_LIST, welches auf eine entsprechende Datenbankspalte gemappt wird].
Ansonsten gilt dasselbe wie für die N:N Beziehungen.
Kommentare
0 Kommentare
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.