bit_mbrandt
I'm new here

Externe und interne Datenquelle verknüpfen

Jump to solution

Hallo,

wir haben in einem Projekt gerade die Herausforderung, eine externe Datenquelle einzubinden und diese Daten mit einer internen Datenquelle anzureichern.

Das folgende Bild veranschaulicht das Setup:

ExtIntDS.png

Die externe Datenbank enthält eine (read-only!) Tabelle, die über eine Content-Projektion ausgegeben wird. Die interne Datenquelle enthält die Tabelle "Marketing-Daten", die einen Datensatz in der externen Datenquelle referenzieren. Das funktioniert soweit über ein FS_DATASET.

Die Herausforderung ist nun, auf effiziente Art, während der Content-Projektion den entsprechenden Datensatz aus der Tabelle "Marketing-Daten" zu ermitteln. Die erste Idee einen contentSelect mit einer Query zu nutzen gestaltet sich als schwierig, da der Verweis in der internen Datenquelle (im Bild "Tabelle1") in der Query nicht aufgelöst wird:

<CMS_HEADER>

<CMS_FUNCTION name="contentSelect" resultname="marketingContent">

  <CMS_PARAM  name="schema" value="internal_datasource" />

  <CMS_VALUE_PARAM  name="table_entry_id" value="76" />

  <QUERY entityType="marketing_daten">

    <FILTERPARAM parameter="table_entry_id" datatype="java.lang.Integer" value="0" />

    <EQ attribute="tabelle1.dataset.entity.Id" parameter="table_entry_id" />

  </QUERY>

</CMS_FUNCTION>

</CMS_HEADER>

Der Teil "tabelle1.dataset.entity.Id" wird nicht aufgelöst, so dass hiernach nicht gefiltert werden kann.

Wird der Content-Select ohne der Query ausgeführt, so liefert uns der Aufruf von "marketingContent[0].get("tabelle1").getDataset.getEntity.get("Id")" die korrekte ID.

Wie können wir in der Query nach der ID des referenzierten Eintrags in der Tabelle der externen Datenquelle filtern?

Danke und Grüße

Martin

1 Solution

Accepted Solutions

Hallo,

vielen Dank für die hilfreichen Informationen. Eine Lösung über den RELEASE-Workflow kommt nicht in Frage, da Redakteure die Vorschau dann erst nach der Freigabe sinnvolle Ergebnisse zeigen würde, was die Vorschau ad absurdum führen würde.

Wir haben aber eine ähnliche Variante umgesetzt. Wir haben wie vorgeschlagen eine "versteckte" Spalte in der von FirstSpirit verwalteten Tabelle erstellt, die die ID der externen Datenquelle speichert. Gespeichert wird die ID in FS4 über ein Script, das die Redaktion im Formular über einen FS_BUTTON ausführt.

In FS5 würden wir Regeln verwenden, um die Werte zu übernehmen.

Damit ist diese Lösung soweit verwendbar.

Vielen Dank für den Hinweis und viele Grüße

Martin

View solution in original post

0 Kudos
2 Replies
witt
I'm new here

Hallo Herr Brandt,

der Inhalt der externen Datenquelle kann und darf vermutlich nicht geändert werden? Darf ein externer Datensatz eine Mehrfachzuordnung zu Marketingdaten haben?

Da FirstSpirit in der Spalte "Tabelle1" nicht nur den reinen Key speichert sondern auch noch XML, ist eine einfache Abfrage gegen die Spalte, wie von Ihnen beschrieben, leider nicht möglich.

Als möglichen Workaround könnte man allerdings über den Workflow (RELEASE) den Inhalt, also die eigentliche ID der externen Tabelle in eine Hiddenspalte "real_id" der Marketingtabelle speichern und darüber später auch die Abfrage durchführen. Im Formular könnten sie die Spalte über Regeln zum Beispiel lesend nur Entwicklern zur Verfügung stellen.

So könnten sie dann zur Laufzeit die Query richtig instrumentalisieren und würden eine Liste aller Marketingdaten zurückgeliefert bekommen.

Hallo,

vielen Dank für die hilfreichen Informationen. Eine Lösung über den RELEASE-Workflow kommt nicht in Frage, da Redakteure die Vorschau dann erst nach der Freigabe sinnvolle Ergebnisse zeigen würde, was die Vorschau ad absurdum führen würde.

Wir haben aber eine ähnliche Variante umgesetzt. Wir haben wie vorgeschlagen eine "versteckte" Spalte in der von FirstSpirit verwalteten Tabelle erstellt, die die ID der externen Datenquelle speichert. Gespeichert wird die ID in FS4 über ein Script, das die Redaktion im Formular über einen FS_BUTTON ausführt.

In FS5 würden wir Regeln verwenden, um die Werte zu übernehmen.

Damit ist diese Lösung soweit verwendbar.

Vielen Dank für den Hinweis und viele Grüße

Martin

0 Kudos