Search the FirstSpirit Knowledge Base
Hallo zusammen,
wir haben aktuell ein Problem bei der Ausgabe des FS_INDEX. Der Kunde hat Termine die an diversen Attribute gekoppelt sind. Er möchte aber bei der Auswahl der Termine in den FS_INDEX nur die Termine eines bestimmten Attributes sehen. Ich habe dies über eine neue Combobox, einer Query und Regeln gelöst. Die Combobox lädt eine Liste der Attribute, der Query an der FS_INDEX ist zunächst auf -1 gestellt. Über Regeln wird der Param entsprechend des Auswahl in der Combobox angepasst.
<RULES>
<RULE>
<IF>
<NOT>
<PROPERTY name="EMPTY" source="st_filter"/>
</NOT>
</IF>
<WITH>
<PROPERTY name="VALUE" source="st_filter"/>
</WITH>
<DO>
<PROPERTY name="query.id" source="st_checklist"/>
</DO>
</RULE>
</RULES>
(st_filter > Combobox, st_checklist > Index)
Dies funktioniert auch soweit für das eigentliche Problem. Das heisst, nach Auswahl eines Attributes kann man mittels FS_INDEX nur noch entsprechende Termine auswählen führt jedoch zu Problemen bei der Ausgabe. Wenn man versucht über die Einträge zu iterieren, sind diese zwar da - das heisst es wird genauso oft durch die Values iteriert wie Values ausgewählt wurden - diese sind aber leer. Ich vermute es hat was damit zu tun, dass der Query standardmäßig auf -1 gesetzt wird, hab aber vielleicht auch einfach nur keine andere Erklärung. Wenn ich den Query-part aus dem FS_INDEX entferne, kann ich zumindest super auf die Einträge zugreifen.
Kennt jemand das Problem und weiß wie ich an die Daten komme?
Danke und Grüße,
Andreas
Hallo Andreas,
bei der Ausgabe werden die Regeln nicht ausgewertet, entsprechend verbleibt die query.id auf -1 und jeder Zugriff auf die Daten liefert kein Ergebnis.
Besser ist hier, dass bei nicht gesetztem Parameter immer Zugriff auf alle Daten möglich ist. Um deinen Auswahleffekt zu erreichen, könntest du mit einer zweiten Regel dafür sorgen, dass bei leerem Filter -1 als Parameterwert gesetzt wird. Dies sollte deine Anforderung umsetzen.
Beste Grüße
Stefan
Hallo,
viele Dank für die Antwort. Klingt auch sehr plausibel. Hat aber in der Praxis leider keine Änderung gebracht.
Ich habe die Param-Zeile jetzt heraus genommen. Und in der Tat, solange man das Dropdown-Menü nicht anfasst und den Param dadurch verändert, funktioniert es. Sobald man jedoch, den Param mittels Dropdown anpasst, sind die Ergebnisse weiterhin leer. Gibt es noch Ideen? Auffällig ist auch, dass ich, wenn ich per Combobox die Auswahl eingrenzt habe und danach die Combobox zurücksetze, die Auswahl begrenzt bleibt. Wie kann ich den Parameter zurücksetzten...das wäre vielleicht noch was für ein ON_SAVE Event.
Ich poste mal zusätzlich noch den Code für Formular, und Filter.
Formulare:
<CMS_INPUT_COMBOBOX name="st_filter" allowEmpty="yes" hFill="yes" useLanguages="no">
<CMS_INCLUDE_CONTENT type="entries" table="Checkliste_fuer_Aussteller.veranstaltung">
<LABEL lang="*">#row.getValue("Name")</LABEL>
</CMS_INCLUDE_CONTENT>
</CMS_INPUT_COMBOBOX>
<FS_INDEX name="st_checklist">
<SOURCE name="DatasetDataAccessPlugin">
<QUERY name="Checkliste.termine_nach_id"/>
<TEMPLATE uid="Checkliste.termine"/>
</SOURCE>
</FS_INDEX>
Filter termine_nach_id:
<QUERY entityType="Termine">
<FILTERPARAM parameter="id" datatype="java.lang.Integer" value="1984"/>
<EQ attribute="termin.fs_id" parameter="id"/>
</QUERY>
Danke und Grüße,
Andreas
Hi Andreas,
bin jetzt nicht ganz sicher, ob ich deine Umsetzung verstehe. Deine Query oben schränkt ja initial immer auf 1984 ein, sind denn dann alle Datensätze sichtbar?
"wenn ich per Combobox die Auswahl eingrenzt habe und danach die Combobox zurücksetze, die Auswahl begrenzt bleibt. Wie kann ich den Parameter zurücksetzten."
Das liegt an dem IF in deiner Regel, würde ich mal vermuten. Denn die wird ja nur ausgeführt, wenn die Combobox nicht leer ist.
Beste Grüße
Stefan
Ja, da bin ich auch schon drüber gestolpert, aber bevor ich eine Auswahl treffe werden in der Tat alle Datensätze angezeigt.
Ich wüßte jetzt aber auch nicht wie man den Filter so schreibt, dass er zwar eine ID als Parameter entgegennimmt, aber trotzdem alle Datensätze anzeigt, wenn kein Parameter gesetzt ist.
Hi Andreas,
ja, da hast du vermutlich Recht bzgl. Filter mit optionalem Parameter. Ich frage da noch bei jemandem nach, aber bei Zahlenwerten könnte es sein, dass es nicht geht. Wäre es eine Textspalte, könnte man wohl einfach einen % reinschreiben.
Beste Grüße
Stefan
Hallo Andreas,
hat ein wenig gedauert, aber deine Einschätzung hat sich bestätigt. Optional filtern geht hier nicht.
Einen Workaround könnte man über eine versteckte Komponente ermöglichen, die dann als eigentlicher Werteträger für die Ausgabe etc. dient. Wäre dann eine Schatten-FS_INDEX-Komponente ohne Query-Einschränkung, die jeweils eine Kopie der Auswahlkomponente erhält (z. B. zum Zeitpunkt des Speicherns).
Beste Grüße
Stefan
Hallo,
ein Kollege hatte gerade noch eine Lösungsidee, die sich umsetzen lässt, wenn du eine neue Spalte im Datenbankschema definieren kannst. Dann könnte man eine quasi-bedingte Abfrage basteln.
Vorgehen:
In der UI greift dann immer der erste Parameter. Bei der Ausgabe greift dann der zweite Parameter des Oders und alle Daten sind erreichbar.
Beste Grüße
Stefan
Hallo Andreas,
vielleicht geht es sogar noch etwas einfacher (ohne neue Spalte sondern man nimmt einfach die FS_ID):
Grundansatz ist derselbe, also ein zweiter Parameter (also eine zweite Bedingung, die mit der "eigentlichen" per ODER verknüpft ist). Bedingung wäre
fs_id < DUMMY_PARAM. Initial setzt man den Dummy-Param auf den Maximalwert so dass er alle Werte liefert. Über die Regel im Formular setzt man ihn dann auf 0 oder auch den Minimalwert, so dass da dann nur noch der "eigentliche" Filterparameter greift.
Viele Grüße
Michael
Hallo Andreas,
benötigst Du noch weitere Hilfe oder haben Dir Michaels und Stefans Antworten bereits geholfen? In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst.
Viele Grüße
Michaela