th_biedermann
Occasional Collector

Daten aus Datenquelle gruppieren in CMS_INPUT_COMBOBOX

Jump to solution

Hallo zusammen

Ich habe eine Datenbank, nicht FirstSpirit Datenbank. Die Datenbank ist eingebunden.

In der Spalte Marke stehen x-mal die selben Werte wie zum Beispiel: Allchemet oder STAMM.

Ich möchte nun die Marke als Auswahl in einem Formular als "CMS_INPUT_COMBOBOX" anbieten. Dort sollen aber die Werte nur einmal vorkommen. Wie kann ich das umsetzen?

Danke für einen Tipp und Grüsse

Thomas

 

 

0 Kudos
2 Solutions

Accepted Solutions
hoebbel
Crownpeak employee

Hallo Thomas,

ich würde das so machen:

In der Datenbank einen View einbinden, der den gewünschten Inhalt hat.

Im Schema diesen View als Datenbanktabelle einbinden (das muss wahrscheinlich manuell geschehen, indem man das Schema extern bearbeitet. Du kannst aber die bereits vorhandene Tabelle als Vorlage nehmen. Entweder kopieren oder (wenn die kompletten Daten nicht benötigt werden) den dbname auf den des Views ändern. Im View nicht vorhandene Spalten entfernen). Dann eine Tabellenvorlage beruhend auf dem View erzeugen und die Datensätez aus dieser in der Combobox zur Auswahl anbieten.

Das klingt komplizierter als es ist ;), auch wenn es ein paar kleinere Fallstricke gibt (z.B. dass das XML valide bleiben muss). deshalb unbedingt das Original-XML sichern, damit Du immer wieder darauf zurückgehen kannst.

Viele Grüße
Holger

View solution in original post

0 Kudos

Hallo Holger

Alles klar. Dann muss ich mir den jeweiligen Key der Marke liefern lassen. Die Daten werden aus einem Drittsystem via XML in unsere DB geschrieben und dann über FS ausgegeben.

Ich DANKE Dir und viele Grüsse

Thomas

View solution in original post

0 Kudos
6 Replies
hoebbel
Crownpeak employee

Hallo Thomas,

ich würde das so machen:

In der Datenbank einen View einbinden, der den gewünschten Inhalt hat.

Im Schema diesen View als Datenbanktabelle einbinden (das muss wahrscheinlich manuell geschehen, indem man das Schema extern bearbeitet. Du kannst aber die bereits vorhandene Tabelle als Vorlage nehmen. Entweder kopieren oder (wenn die kompletten Daten nicht benötigt werden) den dbname auf den des Views ändern. Im View nicht vorhandene Spalten entfernen). Dann eine Tabellenvorlage beruhend auf dem View erzeugen und die Datensätez aus dieser in der Combobox zur Auswahl anbieten.

Das klingt komplizierter als es ist ;), auch wenn es ein paar kleinere Fallstricke gibt (z.B. dass das XML valide bleiben muss). deshalb unbedingt das Original-XML sichern, damit Du immer wieder darauf zurückgehen kannst.

Viele Grüße
Holger

0 Kudos

Hallo Holger

Danke für den Tipp. Ich bin auch schon ziemlich weit mit der Umsetzung. Ich habe eine View erstellt. Ich habe versucht das Schema extern zu bearbeitet und wieder eingebettet. Ich sehe in FirstSpirit in Schema die neue Tabelle. Habe das Formular mit dem Mapping erstellt und auch eine Datenquelle auf basis der neuen Tabelle erstellt.

Das Problem ist nun, dass ich keine Datensätze sehe. Auf der Datenbank selber sehe ich Datensätze.

Schema:

<xs:complexType dbName="sfs_inserate_marke" name="sfs_inserate_marke" readonly="1">
<xs:sequence>
<xs:element dbName="MARKE" javaType="java.lang.String" length="50" name="Marke" nullable="1" type="xs:string"/>
</xs:sequence>
</xs:complexType>

Ich kann leider keine Bilder einbetten. Aber vielleich siehst du den Fehler.

Grüsse. Thomas

 

0 Kudos

Hallo Thomas,

der View heißt in der Datenbank sfs_inserate_marke? Wenn ja, hat er eine Spalte, die als "PseudoPrimaryKey" verwendet werden kann? Wenn das XML vollständig ist, ist die Antwort "nein" 
[die Spalte wird gebraucht, da wir FS vorspiegeln müssen, dass es eine "echte" Datenbanktabelle ist]. Die Spalte sollte idealerweise keine Daten enthalten, die du später ausgeben willst.

Anschließend muss die Spalte FS noch als primary key im Schema bekannt gemacht werden, beispielsweise so:

<xs:key dbName="pk_sfs_inserate_marke" name="pk_sfs_inserate_marke">
	<xs:selector xpath="sfs_inserate_marke"/>
	<xs:attribute xpath="<eindeutiger-Identifier>"/>
</xs:key>

 

Helfen dir die Hinweise weiter?
Anmerkung: Ich habe einen View das letzte Mal vor 10 Jahren oder so eingebunden. Ich bin da ein bisschen eingerostet 😉 Leider kann ich nicht ausschließen, dass ich im Moment etwas übersehe...

Viele Grüße
Holger

0 Kudos

Hallo Holger

Vielen lieben DANK für deinen Tipp. Ich habe nun Daten im FirstSpirit 🙂

Ich kann auch über die " <CMS_INPUT_COMBOBOX" die Daten zugreifen. Ich frage mich nun nur noch, was wird eigendlich in FS gespeichert. Der MARKEN_KEY oder die MARKE.

Da die View den Key erstellt, könnte dieser sich ja ändern und dann wären die falschen Daten auf dem FirstSpirit Template gesetzt.

 

SELECT
	ROW_NUMBER() OVER(ORDER BY (MARKE) ASC) MARKEN_KEY,
	sfs_inserate_erecruiting.MARKE
	
FROM sfs_inserate_erecruiting

GROUP BY
	sfs_inserate_erecruiting.MARKE 

 

Grüsse. Thomas

0 Kudos

Hallo Thomas,

es wird der Key gespeichert. In der Datenbank muss also sichergestellt werden, dass der Key eindeutig der Marke zugeordnet werden kann. 

Aus technischer Sicht "glaubt" FirstSpirit, dass eine Datenbanktabelle (und kein View) angebunden ist. Da die Referenz bei redaktionellen Änderungen in der Datenbank nicht kaputt gehen darf, benutzt FirstSpirit grundsätzlich technische, möglichst unveränderliche Referenzen (bei FirstSpirit Datenquellen werden deshalb inzwischen die GIDs verwendet, die auch nach einem Datensatz-Transfer erhalten bleiben).

Für den Anwendungsfall hier ist das zwar unschön, allgemein aber das gewünschte Verhalten. Kannst Du in der Datenbank aus den Marken eine UUID erzeugen und die Spalte als Identifier in FirstSpirit angeben?

[ACHTUNG: Änderungen an der Identifier Spalte führen natürlich dazu, dass bereits gespeicherte Referenzen ungültig werden!]

Viele Grüße
Holger

0 Kudos

Hallo Holger

Alles klar. Dann muss ich mir den jeweiligen Key der Marke liefern lassen. Die Daten werden aus einem Drittsystem via XML in unsere DB geschrieben und dann über FS ausgegeben.

Ich DANKE Dir und viele Grüsse

Thomas

0 Kudos