Jannis
I'm new here

Datenquelle Eintrag abfrage case insensitive

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

0 Kudos
14 Replies

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.

0 Kudos

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.

0 Kudos

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.

  1. Ich habe ein BeanShell-Skript geschrieben, welches die Liste geeignet sortiert. Das Ergebnis der Sortierung ist eine List<Entity>, die ich gerne wieder an das Template zurückreichen könnte. Dazu fehlt mir eine Funktion wie $CMS_SET(set_result, call(skript:"meinSkript", params...))$. Gibt es das und ich habe es nur nicht gefunden?
  2. Ich habe ein Java-Modul geschrieben und dieses als globale Bibliothek im Server hinterlegt, darunter eine statische Methode, die die Sortierung umsetzt. In der Beanshell-Konsole kann ich die Methode erfolgreich aufrufen. Hinterlege ich den Aufruf im Template $CMS_SET(set_result, de.adesso.firstspririt.blablabla.Sorter.sort(resultset))$, so bekomme ich die Ausgabe, auf "...Undefined" existiere die Methode nicht. Der CLASSPATH scheint also das Modul nicht zu enthalten. Was ist hier zu tun?
0 Kudos

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.

Peter
0 Kudos

Danke für die schnelle Antwort. entries.copy.sort(entry -> entry.row.toUpperCase()) löst das Problem.

0 Kudos