Search the FirstSpirit Knowledge Base
Hallo Community,
ich sitze gerade an einem Projekt und habe die Aufgabe einem FS_DATASET einen Default-Wert zu geben. Leider soll hiefür ein dynamischer "Datums-Abhängiger"-Wert ausgelesen werden.
Ist es überhaupt möglich, dass man einem FS_DATASET ein Default-Wert gibt, welcher durch ein Query gefüllt wird?
Unser Anwenungsfall:
Wir haben eine Einstellungsmöglichkeit in der man ein Event auswählen kann. Dies ist kein Pflichtfeld. Sofern hier kein Event ausgewählt wurde, soll das Event genommen werden, welches in der DB im Feld "start_date" von heute aus gesehen das nächste Event ist.
Das Query sieht wie folgt aus:
<CMS_HEADER>
<CMS_FUNCTION name="contentSelect" resultname="fr_st_nextEvent">
<CMS_PARAM name="schema" value="master_content" />
<QUERY entityType="events" limit="1">
<ORDERCRITERIA attribute="start_date" ascending="1" />
<AND>
<GTE attribute="start_date" datatype="de.espirit.common.Now" value="global.now.timeInMillis"/>
</AND>
</QUERY>
</CMS_FUNCTION>
</CMS_HEADER>
Vielen Dank im Voraus,
Tim
Leider musste ich hier ein wenig tricksen und 4 verschiedene Abfragen machen um auf meine Lösung zu kommen:
<CMS_FUNCTION name="contentSelect" resultname="fr_st_nextDefiniteEvent">
<CMS_VALUE_PARAM name="network_id" value="set_networkId" />
<CMS_PARAM name="schema" value="master_content" />
<QUERY entityType="events" limit="1">
<FILTERPARAM parameter="network_id" datatype="java.lang.Long"/>
<AND>
<EQ attribute="network.fs_id" datatype="java.lang.Integer" parameter="network_id"/>
<GTE attribute="end_date" datatype="de.espirit.common.Now" value="global.now.timeInMillis"/>
</AND>
<ORDERCRITERIA attribute="start_date"/>
</QUERY>
</CMS_FUNCTION>
<CMS_FUNCTION name="contentSelect" resultname="fr_st_lastDefiniteEvent">
<CMS_VALUE_PARAM name="network_id" value="set_networkId" />
<CMS_PARAM name="schema" value="master_content" />
<QUERY entityType="events" limit="1">
<FILTERPARAM parameter="network_id" datatype="java.lang.Long"/>
<AND>
<EQ attribute="network.fs_id" datatype="java.lang.Integer" parameter="network_id"/>
</AND>
<ORDERCRITERIA attribute="start_date" descending="1"/>
</QUERY>
</CMS_FUNCTION>
<CMS_FUNCTION name="contentSelect" resultname="fr_st_nextTemporaryEvent">
<CMS_VALUE_PARAM name="network_id" value="set_networkId" />
<CMS_PARAM name="schema" value="master_content" />
<QUERY entityType="events" limit="1">
<FILTERPARAM parameter="network_id" datatype="java.lang.Long"/>
<AND>
<EQ attribute="network.fs_id" datatype="java.lang.Integer" parameter="network_id"/>
<GTE attribute="temporary_date" datatype="de.espirit.common.Now" value="global.now.timeInMillis"/>
</AND>
<ORDERCRITERIA attribute="temporary_date"/>
</QUERY>
</CMS_FUNCTION>
<CMS_FUNCTION name="contentSelect" resultname="fr_st_lastTemporaryEvent">
<CMS_VALUE_PARAM name="network_id" value="set_networkId" />
<CMS_PARAM name="schema" value="master_content" />
<QUERY entityType="events" limit="1">
<FILTERPARAM parameter="network_id" datatype="java.lang.Long"/>
<AND>
<EQ attribute="network.fs_id" datatype="java.lang.Integer" parameter="network_id"/>
</AND>
<ORDERCRITERIA attribute="temporary" descending="1"/>
</QUERY>
</CMS_FUNCTION>
$CMS_IF(!gc_headerEvent.empty)$
$CMS_SET(set_networkId, gc_headerEvent.getDataset.getFormData.fs_id)$
$-- check if event networks returns an event and set next, respectively last event, as eventDataset --$
$CMS_IF(!fr_st_nextDefiniteEvent.empty)$
$CMS_SET(set_eventDataset, fr_st_nextDefiniteEvent.first)$
$CMS_ELSIF(fr_st_nextEvent.empty && !fr_st_lastDefiniteEvent.empty)$
$CMS_SET(set_eventDataset, fr_st_lastDefiniteEvent.first)$
$CMS_ELSIF(!fr_st_nextTemporaryEvent.empty)$
$CMS_SET(set_eventDataset, fr_st_nextTemporaryEvent.first)$
$CMS_ELSIF(fr_st_nextTemporaryEvent.empty && !fr_st_lastTemporaryEvent.empty)$
$CMS_SET(set_eventDataset, fr_st_lastTemporaryEvent.first)$
$CMS_ELSE$
$CMS_SET(set_eventDataset, null)$
$CMS_END_IF$
$CMS_END_IF$
Hi Tim,
kannst Du vielleicht noch die Verwendung von fr_st_nextEvent posten? Benötigst Du den Defaultwert in der FS GUI oder in der Ausgabe, z.B. als default eines <select> Feldes?
Gruß,
Tibor
Hallo Tim,
falls Deine Frage noch aktuell ist, wäre es schön, wenn Du Tibors Rückfragen noch beantworten könntest.
Solltest Du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.
Grüße,
Tanja
Leider musste ich hier ein wenig tricksen und 4 verschiedene Abfragen machen um auf meine Lösung zu kommen:
<CMS_FUNCTION name="contentSelect" resultname="fr_st_nextDefiniteEvent">
<CMS_VALUE_PARAM name="network_id" value="set_networkId" />
<CMS_PARAM name="schema" value="master_content" />
<QUERY entityType="events" limit="1">
<FILTERPARAM parameter="network_id" datatype="java.lang.Long"/>
<AND>
<EQ attribute="network.fs_id" datatype="java.lang.Integer" parameter="network_id"/>
<GTE attribute="end_date" datatype="de.espirit.common.Now" value="global.now.timeInMillis"/>
</AND>
<ORDERCRITERIA attribute="start_date"/>
</QUERY>
</CMS_FUNCTION>
<CMS_FUNCTION name="contentSelect" resultname="fr_st_lastDefiniteEvent">
<CMS_VALUE_PARAM name="network_id" value="set_networkId" />
<CMS_PARAM name="schema" value="master_content" />
<QUERY entityType="events" limit="1">
<FILTERPARAM parameter="network_id" datatype="java.lang.Long"/>
<AND>
<EQ attribute="network.fs_id" datatype="java.lang.Integer" parameter="network_id"/>
</AND>
<ORDERCRITERIA attribute="start_date" descending="1"/>
</QUERY>
</CMS_FUNCTION>
<CMS_FUNCTION name="contentSelect" resultname="fr_st_nextTemporaryEvent">
<CMS_VALUE_PARAM name="network_id" value="set_networkId" />
<CMS_PARAM name="schema" value="master_content" />
<QUERY entityType="events" limit="1">
<FILTERPARAM parameter="network_id" datatype="java.lang.Long"/>
<AND>
<EQ attribute="network.fs_id" datatype="java.lang.Integer" parameter="network_id"/>
<GTE attribute="temporary_date" datatype="de.espirit.common.Now" value="global.now.timeInMillis"/>
</AND>
<ORDERCRITERIA attribute="temporary_date"/>
</QUERY>
</CMS_FUNCTION>
<CMS_FUNCTION name="contentSelect" resultname="fr_st_lastTemporaryEvent">
<CMS_VALUE_PARAM name="network_id" value="set_networkId" />
<CMS_PARAM name="schema" value="master_content" />
<QUERY entityType="events" limit="1">
<FILTERPARAM parameter="network_id" datatype="java.lang.Long"/>
<AND>
<EQ attribute="network.fs_id" datatype="java.lang.Integer" parameter="network_id"/>
</AND>
<ORDERCRITERIA attribute="temporary" descending="1"/>
</QUERY>
</CMS_FUNCTION>
$CMS_IF(!gc_headerEvent.empty)$
$CMS_SET(set_networkId, gc_headerEvent.getDataset.getFormData.fs_id)$
$-- check if event networks returns an event and set next, respectively last event, as eventDataset --$
$CMS_IF(!fr_st_nextDefiniteEvent.empty)$
$CMS_SET(set_eventDataset, fr_st_nextDefiniteEvent.first)$
$CMS_ELSIF(fr_st_nextEvent.empty && !fr_st_lastDefiniteEvent.empty)$
$CMS_SET(set_eventDataset, fr_st_lastDefiniteEvent.first)$
$CMS_ELSIF(!fr_st_nextTemporaryEvent.empty)$
$CMS_SET(set_eventDataset, fr_st_nextTemporaryEvent.first)$
$CMS_ELSIF(fr_st_nextTemporaryEvent.empty && !fr_st_lastTemporaryEvent.empty)$
$CMS_SET(set_eventDataset, fr_st_lastTemporaryEvent.first)$
$CMS_ELSE$
$CMS_SET(set_eventDataset, null)$
$CMS_END_IF$
$CMS_END_IF$