sarahfinkel
Elite Observer

FS_LIST | Speicherung der Reihenfolge der ausgewählten Datensätze in einer n:m Beziehung

Hallo zusammen,

gibt es die Möglichkeit, die Reihenfolge der ausgewählten Datensätze in einer FS_LIST zu speichern, wenn die Tabellen in einer n:m - Beziehung zueinander stehen?

Hintergrund ist folgender:

Wenn man über die FS_LIST Datensätze aus einer Zieltabelle, die mit der Quelltabelle in einer n:m - Beziehung steht, mehrere Datensätze auswählt, so werden diese immer sortiert nach deren ID in der FS_LIST gespeichert.

Auch wenn man durch die "Pfeil" - Buttons die Reihenfolge der Einträge umstellt, wird diese nach anschließender Speicherung nicht übernommen.

Gibt es hier irgendeine Möglichkeit, die Reihenfolge zu speichern?

Vielen Dank!

Herzliche Grüße

Sarah Finkel

0 Kudos
12 Replies
rusch
I'm new here

Hallo Frau Finkel,

vielen Dank für Ihren Beitrag.

Bei den Eingabekomponenten FS_LIST und CMS_INPUT_CONTENTLIST ist eine Speicherung der Reihenfolge nur bei einer 1:n-Fremdschlüsselbeziehung möglich.

Eine Speicherung der Reihenfolge bei einer n:m-Fremdschlüsselbeziehung ist nicht möglich.

Die Einträge der Eingabekomponente FS_LIST können bei der Anzeige im JavaClient über das Attribut sortOrder sortiert werden.

In Vorlagen können die FS_LIST-Werte mithilfe von Abbildungsausdrücken (Lambda) sortiert werden, z. B. anhand der Datensatz-ID:

$CMS_FOR(entry, fs_list_content.sort(x -> x.fs_id))$

    $CMS_VALUE(entry.fs_id)$

$CMS_END_FOR$

Zusätzlich ist es empfehlenswert die beiden ACTION-Angaben UP and DOWN aus der FS_LIST-Konfiguration zu entfernen.

Viele Grüße,

Sascha Rusch

klein
Crownpeak employee

folgendes Workaround sollte aber eigentlich funktionieren:

===============

- Bearbeiten Sie den Datensatz, bei dem die CMS_INPUT_CONTENTLIST-Einträge nicht wie gewünscht gespeichert sind

- löschen Sie diese Einträge aus der CMS_INPUT_CONTENTLIST

- speichern Sie den Datensatz (einfacher Klick auf das "Speichern"-Icon)

- fügen Sie den ersten gewünschten Eintrag in die CMS_INPUT_CONTENTLIST

- speichern Sie den Datensatz (einfacher Klick auf das "Speichern"-Icon)

- fügen Sie den zweiten gewünschten Eintrag in die CMS_INPUT_CONTENTLIST

- speichern Sie den Datensatz (einfacher Klick auf das "Speichern"-Icon)

....

- wenn alle gewünschte Eintrage eingefügt sind, können Sie die Bearbeitung des Datensatzes abschließen -> die Einträge bleiben in der Reihenfolge, wie Sie diese gespeichert haben.

===============

ACHTUNG: das Workaround funktioniert zwar, aber es handelt sich dabei um keine persistente Lösung (s.obere Antworten)! D.h. spätestens nach einem Projektreimport oder wenn die Datenbank mal umkonfiguriert wird oder die Datenbank mal die gecachte Ergebnisse liefert, dann wird die Reihenfolge wieder zurückgesetzt - auch in der Ansicht im JavaClient!

0 Kudos
hoebbel
Crownpeak employee

Hallo Frau Finkel,

rusch schrieb:

Eine Speicherung der Reihenfolge bei einer n:m-Fremdschlüsselbeziehung ist nicht möglich.

Die Aussage von Herrn Rusch ist natürlich korrekt.

Aber sofern Sie der Fremdschlüsselbeziehung nicht in die andere Richtung folgen müssen, könnten Sie die Daten auch in einer XML Spalte speichern. In diesem Fall ist es dann möglich, eine beliebige Reihenfolge zu definieren. Nachteil dieser Lösung ist allerdings, dass die entsprechende Beziehung nicht in der Datenbank gespeichert wird. Sofern also der Beziehung in beiden Richtungen gefolgt werden muss, ist diese Lösung unbrauchbar. Wenn Sie aber "nur" die Beziehung von dem Datensatz mit der Eingabekomponente zu den anderen Datensätzen herstellen müssen, könnten Sie die Speicherung in einer XML Spalte benutzen.

Hinweis: Bei n:m Beziehungen werden die Daten in einer Zwischentabelle gespeichert und in der Reihenfolge ausgegeben, wie Sie von der Datenbank zurückgeliefert werden. Diese Reihenfolge ist zwar in der Praxis bei mehreren Ausgaben immer die selbe, aber dies ist nicht gesichert.

Viele Grüsse aus Dortmund,

  Holger Höbbel

Hallo zusammen,

vielen Dank für die Antworten!

Wir werden nun die n:m Beziehung auflösen und die Speicherung nur in der XML Spalte vornehmen!

0 Kudos

Hallo zusammen,

leider funktioniert die Speicherung der Datensätze ebenfalls nicht, wenn die n:m - Beziehung gelöst und die Datensätze in einer XML-Spalte gespeichert werden.

Mache ich was falsch?

Herzliche Grüße

Sarah Finkel

0 Kudos

Hallo Frau Finkel,

das genannte Problem konnte ich leider nicht nachstellen.

Ist im Schema in der entsprechenden Tabelle eine Spalte vom Typ FIRSTspirit-Editor ergänzt worden?

Ist für die FS_LIST-Eingabekomponente diese Spalte im Reiter Mapping (in der Tabellenvorlage) hinterlegt?

Viele Grüße,

Sascha Rusch.

0 Kudos

Hallo Herr Rusch,

ja dies ist alles so umgesetzt.

Ich habe sogar nochmal einen neuen Test wie folgt angelegt:

1. neues Schema "test_fs_list"

2. Tabelle "fsList" angelegt mit Spalte "fs_list_datasource_2" (Typ XML)

3. Tabelle "werte" angelegt mit Spalte "wert" (Typ String)

4. Folgende FS_LIST mapped auf "fs_list_datasource_2":

-------------------------------------------------------------------------------------

<FS_LIST name="cs_fs_datasource_test" hFill="no" rows="5" width="840">

    <DATASOURCE type="database" useLanguages="no">

      <ACTIONS>

        <ACTION name="ADD"/>

        <ACTION name="REMOVE"/>

        <ACTION name="UP"/>

        <ACTION name="DOWN"/>

        <ACTION name="GOTO"/>

      </ACTIONS>

      <COLUMNS>

        <COLUMN show="yes">0</COLUMN>

        <COLUMN show="no">1</COLUMN>

        <COLUMN show="no">2</COLUMN>

        <COLUMN show="yes">3</COLUMN>

      </COLUMNS>

      <LAYOUT>

        <ADD component="toolbar" constraint="top"/>

        <ADD component="overview" constraint="center"/>

        <ADD component="stackedview" constraint="hide"/>

      </LAYOUT>

      <TABLE>test_fs_list.wert</TABLE>

    </DATASOURCE>

    <LANGINFOS>

      <LANGINFO lang="*" label="Auswahl" description=""/>

    </LANGINFOS>

  </FS_LIST>

--------------------------------------------------------------------------------------------

Folgendes Szenario:

1. Anlegen "wert 1" in Werte

2. Anlegen "wert 2" in Werte

3. Auswahl "wert 1" in FS_LIST

4. Auswahl "wert 2" in FS_LIST

5. Speichern

6. Der "wert 2" wird nach Speichern automatisch an erste Stelle gesetzt

7. Verschieben des "wert 2" unter "wert 1"

8. Speichern

9. "wert 2" ist nach Speichern trotzdem wieder an erster Stelle Smiley Sad

Viele Grüße

Sarah Finkel

0 Kudos

Hallo Frau Finkel,

welche FirstSpirit-Version setzen Sie ein?

4.2.427.43284?

Intern wurde das beschriebene Problem mit Version 4.2.427.43284 gemeldet und bereits behoben (interne ID #94337).

Viele Grüße,

Sascha Rusch

Hallo Herr Rusch,

vielen Dank! ja wir haben die Version!

Dann warten wir auf den nächsten Build Smiley Wink

Grüße

Sarah Finkel

0 Kudos