Search the FirstSpirit Knowledge Base
Hallo,
ich möchte mit FirstSpirit Integration (FSI) etwas in einer Datenquelle suchen. Dabei sollte Groß- und Kleinschreibung ignoriert werden.
In "normalem" SQL würde ich sowas in der Art wie "where tolower(name) like tolower(suchbegriff)" machen (richtige Syntax sei jetzt mal dahingestellt)
Wie mache ich das aber bei FSI?
<QUERY entityType="datenquellenname">
<LIKE attribute="name_DE" datatype="java.lang.String" value="<%=searchfor%>"/>
</QUERY>
"searchfor" ist der Suchbegriff, der bereits escaped und ggf. in Kleinbuchstaben daher kommt...z.B: "Test"
Datenquelle sieht in etwa so aus:
Test 1
Test 2
Test 3
Suchbegriff "Test" funktioniert, "test" nicht. (Oracle DB)
Die Hilfe und das Handbuch haben mich leider nicht weiter gebracht...
Vielen Dank und viele Grüße
Jannis
Ja, die geht ja auch - nur dass descending="0" halt das oben beschrieben Verhalten hervorruft (A,B,a,b,c,d und nicht A,a,B,b,c,d).
Interessant ist halt die Tatsache, dass eine solche Query in FS ein anderes Ergebnis liefert als die Query direkt auf der Oracle-DB.
Die Treiber sind auch gleich. Jedenfalls liegt der Treiber, den ich in Eclipse eingebunden habe (worüber ich die Abfragen prüfe), auch im <FS-Ordner>/shared/lib. Der FS-Server wurde auch schon 1000 Mal neu gestartet, somit müßte ja dieser Treiber genutzt werden. Dennoch gibt es die unterschiedlichen Ergebnislisten.
Die Liste manuell nachsortieren hört sich erst einmal einfach an, gestaltet sich aber durchaus kompliziert:
<CMS_FUNCTION name="contentSelect" .../> liefert mir ein ContentSelectImpl.SelectResultList.
Zu 1)
So sollte es gehen:
$CMS_SET(set_result, contentSelect.copy.sort(x -> x.meinAttributFürDieSortierung)))$
Ein Beanshell-Skript ist dafür nicht nötig.
Anmerkung: Der Aufruf "copy" deswegen, weil die Liste selber nicht modifizierbar ist.
Damit sollte sich auch 2) erledigt haben. Trotzdem der Hinweis: Klassennamen können in FirstSpirit nicht wie in Java angegeben werden.
Danke für die schnelle Antwort. entries.copy.sort(entry -> entry.row.toUpperCase()) löst das Problem.