Questions & Answers

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

Type a product name