th_biedermann
Occasional Collector

FS_INDEX über FS_INDEX

Jump to solution

Hallo zusammen

Ich habe folgendes Szenarium:

Ich habe zwei FS_INDEX die hintereinander aufgerufen werden müssen.

Ich muss über den ersten FS_INDEX loopen, dass klappt noch.
Danach muss ich über die Entry's des anderen FS_INDEX loppen. Da erhalte ich keine Ergebnisse.

Der FS_INDEX ist auch noch sprachabhängig.

Sorry ist einbischen schwer zu beschreiben.

 

 

$CMS_IF(#global.preview)$
	$CMS_FOR(entry, cs_instances.values)$
		DEBUG-entry: "-$CMS_VALUE(entry.name)$-"
		$CMS_FOR(for_channel, entry.values)$
			$CMS_IF(for_channel.getIsVChannel())$
		       <vchannel>$CMS_VALUE(for_channel.channelId)$</vchannel>
			$CMS_ELSE$
		       <channel>$CMS_VALUE(for_channel.channelId)$</channel>
			$CMS_END_IF$
		$CMS_END_FOR$
	$CMS_END_FOR$
$CMS_END_IF$

 

 

 

Erster FS_INDEX

snap222.png

 

Zweiter FS_INDEX mit der Empfängerlisten

snap223.png

Grüsse. Thomas

0 Kudos
1 Solution

Accepted Solutions
hoebbel
Crownpeak employee

Hallo Thomas,

müsste der innere FS_INDEX nicht so aufgerufen werden (in der Annahme, dass das DatasetDataAccessPlugin genutzt wird)

$CMS_FOR(for_channel,entry.formData.<Name des inneren FS_INDEX>)$

Wenn in dem Index keine FirstSpirit Datensätze verlinkt sind, wird es schwierig zu unterstützen, da man dann erst einmal wissen muss, was das überhaupt für Objekte sind, die das Data Access Plugin des äußeren FS_INDEX zurück liefert. Da aber innen auch ein FS_INDEX benutzt wird, gehe ich mal davon aus, dass "nur" Datensätze referenziert werden 🙂

Viele Grüße
Holger

View solution in original post

0 Kudos
4 Replies
hoebbel
Crownpeak employee

Hallo Thomas,

müsste der innere FS_INDEX nicht so aufgerufen werden (in der Annahme, dass das DatasetDataAccessPlugin genutzt wird)

$CMS_FOR(for_channel,entry.formData.<Name des inneren FS_INDEX>)$

Wenn in dem Index keine FirstSpirit Datensätze verlinkt sind, wird es schwierig zu unterstützen, da man dann erst einmal wissen muss, was das überhaupt für Objekte sind, die das Data Access Plugin des äußeren FS_INDEX zurück liefert. Da aber innen auch ein FS_INDEX benutzt wird, gehe ich mal davon aus, dass "nur" Datensätze referenziert werden 🙂

Viele Grüße
Holger

0 Kudos

Hoi Holger

Danke für die schnelle Antwort.

Ich habe mal deinen Vorschlag eingebaut. Leider klappt es noch nicht.

Ich erhalte keine Resultate aus dem zweiten FS_INDEX.

Das ist die innere FS_INDEX

 

 

<FS_INDEX name="cs_um_channels" height="2" useLanguages="yes">
<LANGINFOS>
<LANGINFO lang="DE" label="Empfängerlisten/-segmente"/>
<LANGINFO lang="*" label="Recipient lists or segments"/>
</LANGINFOS>
<SOURCE name="EmailMarketing/ChannelDataAccessPlugin" semtagName=""/>
</FS_INDEX>

 

 

Code auslesen

 

 

$CMS_IF(#global.preview)$
	$CMS_FOR(for_instance, cs_instances.values)$
		$CMS_FOR(for_channel, for_instance.formData("cs_um_channels").values)$
			$CMS_IF(for_channel.getIsVChannel())$
				<vchannel>$CMS_VALUE(for_channel.channelId)$</vchannel>
			$CMS_ELSE$
				<channel>$CMS_VALUE(for_channel.channelId)$</channel>
			$CMS_END_IF$
		$CMS_END_FOR$
	$CMS_END_FOR$
$CMS_END_IF$

 

 

Ausgabe von $CMS_VALUE(for_instance)$

 

 

de.espirit.firstspirit.store.access.contentstore.DatasetImpl{de.espirit.or.impl.EntityImpl@d22fae59{T_NEWSLETTER_INSTANCES,PERSISTENT,released,FS_ID=91200,FS_VALID_FROM=1673423723955,FS_VALID_TO=9223372036854775807,FS_RELEASE_TO=9223372036854775807,FS_GID=143908e3-5444-462c-9288-71879f73958b}}

 

 

Grüsse. Thomas

0 Kudos

Hallo Thomas,

Du kannst im FirstSpirit Code entweder die Beanschreibweise nutzen oder die Methoden ausschreiben.

Um das innere FS_INDEX zu bekommen, musst Du also entweder

for_instance.formData.cs_um_channels

oder 

for_instance.formData.get(#global.language,"cs_um_channels").get()

schreiben. (bei sprachunabhängigen Eingabekomponenten kannst Du auch anstelle der Sprache null benutzen)

Und Du musst dann wieder über die values des Index iterieren (so wie außen).

Wenn das nicht auf Anhieb klappt, lass Dir mal die Klasse von dem Objekt ausgeben, dass Du jeweils hast. (mit .getClass() oder .class) Veerinfacht gesagt brauchst Du beim inneren Index dieselbe Klasse wie beim äußeren. Sobald Du die hast, kannst Du über den entsprechenden Ausdruck.values iterieren.

Viele Grüße
Holger

0 Kudos

Hallo Holger

Parallel habe ich noch bei PINUTS nachgefragt. Jetzt klappt es mit dem auslesen.

$CMS_FOR(for_channel, for_instance.formData.cs_um_channels.values)$

			$-- Channel aus EmailMarketing/ChannelDataAccessPlugin lesen --$
			$CMS_FOR(for_instance, cs_instances.values)$
				$CMS_FOR(for_channel, for_instance.formData.cs_um_channels.values)$
					$CMS_IF(for_channel.getIsVChannel())$
						<vchannel>$CMS_VALUE(for_channel.channelId)$</vchannel>
					$CMS_ELSE$
						<channel>$CMS_VALUE(for_channel.channelId)$<channel>
					$CMS_END_IF$
				$CMS_END_FOR$
			$CMS_END_FOR$

 Besten DANK für deine Hilfe und Unterstützung

Grüsse. Thomas

0 Kudos