Variable innerhalb von contains

Ich versuche innerhalb von if Ausdruck in der Funktion "contains" auf die Variable zuzugreifen. Leider funktioniert es so nicht:

<#list meta.spreadsheet@SearchMasterDatastore_63.getRows() as row><#if row.get("BackendName")!?contains(Merkmalgruppe!)>${row.get("ID")!}</#if></#list>


Wenn ich es aber so probiere, dann geht es:

<#list meta.spreadsheet@SearchMasterDatastore_63.getRows() as row><#if row.get("BackendName")!?contains("Gerätekategorie")>${row.get("ID")!}</#if></#list>


Hat jemand schon so ein Fehler gehabt ?


Habe schon unterschiedliche Möglichkeiten ausprobiert:

contains("${Merkmalgruppe!}")

contains('"${Merkmalgruppe!}"')

contains(Merkmalgruppe!?trim?string)????

du bist auf dem fast richtigen Weg :)


Fragen:

1. Du befindest dich im SpreadsheetMapper Step? (oder z.B. in einem TextHTMLWriter Step?)

2. Merkmalsgruppe ist bei dir eine Flow Variable?


Wenn du im Mapper bist, probier es mal mit contains(meta.Merkmalgruppe!)

oder contains(meta.Merkmalgruppe!?trim)


Im Zweifel benutze mal den Plus-Button beim Wert-Feld und füge darüber die Variable irgendwo ein. Dadurch siehst du wie genau diese geschrieben werden muss. Da sollte dann automatisch das meta. davorgesetzt werden. Im Mapper werden Flow-Variablen immer über das meta. Prefix referenziert, damit es nicht zu Namenskonflikten mit den Spaltennamen kommt.


Nebenbei: Die Syntax contains("${myvariable!}") wäre falsch. Da du dich schon innerhalb einer Freemarker-Anweisung befindest, dürfen ${} nicht noch mal verwendet werden. (siehe die Warning hier)




ich befinde mich im SpreadsheetDatastoreWriter.

Merkmalgruppe ist Name von einer Spalte, also aktuelle Wert in dieser Zeile, wird auch ausgegeben, wenn ich einfach unter Wert ${Merkmalgruppe!} eingebe.


In der If-Abfrage wird diese Variable aber nicht ausgewertet .....

Ok danke. SpreadsheetDatastoreWriter und SpreadsheetMapper sind in diesem Fall von der Sache her gleich zu betrachten. Wenn es eine Quellspalte ist, dann braucht es das meta. nicht.


Wir vermuten es sind evtl. irgendwelche Sonderzeichen / Zeilenumbrüche enthalten, die den Vergleich scheitern lassen.


Probier mal folgendes um dieser Vermutung nachzugehen:

Ersetze mal mit Suchen&ersetzen und einem regul. Ausdruck (RegEx) alle Sonderzeichen (Alle Zeichen die nicht aus Zahlen, Buchstaben oder Leerzeichen bestehen). Damit solltest du auch Zeilenumbrüche und anderen Zeichenschrott erwischen.


Regex: [^A-Za-z0-9 ]

Ersetzen durch: [PROBLEM]


image


Schau dir dann mal das Ergebnis an. Wenn dort irgendwo [PROBLEM] auftaucht, dann weisst du, dass irgendwelche kruden Zeichen drin sind. Du könntest dann statt [PROBLEM] einfach durch "leer" ersetzen, um diese Zeichen zu entfernen. in deinem IF-Ausdruck verwendest du dann am besten den ersetzten Wert (per Ergebnisspalte ${result['Merkmalgruppe_ersetzt']}) nutzen.

Vielen Dank. Es liegt an den Umlauten!

Das Problem ist aber, dass ich die Umlaute nicht einfach so ersetzten kann, sondern ich muss in einem String mit Umlauten nach einem String mit Umlauten suchen :)

Noch ein Hinweis: Die RegEx war nur ein Beispiel. Die schneidet auch die Umlaute weg (daran haben wir nicht gedacht).

D.h. die Umlaute sind evtl. nicht unbedingt das Problem.

Wenn du die Umlaute in der Regex auch erlauben willst dann probier mal:

[^\u00C0-\u017FA-Za-z0-9 ] (geborgt von hier)


Gibt es ausser den Umlauten, noch andere Zeichen, die Probleme machen?

Es geht wirklich nur um die Umlaute. Die Umlaute können nicht innerhalb vom contains ausgewertet werden....

Doch, Umlaute gehen in contains. Nachzuprüfen mit

${"blablubmitä usw."!?contains("ä")}

Haben gerade noch mal ein altes Ticket eines anderen Kunden herausgesucht. Dort gab es ein ähnliches Problem und das war eine ganz fiese Geschichte.

Und zwar gibt es Umlaute, die aussehen wie Umlaute, aber eigentlich ein völlig anderes Zeichen sind. Der Browser stellt diese aber als normale Umlaute dar. Mit anderen Worten "what you see is not what you get".


Du kannst das folgendermaßen herausfinden:

1. Lass dir die Werte mal im Mapper anzeigen, so dass der Umlaut richtig ausgegeben wird ${Merkmalgruppe!}

2. Markiere das Wort mit der Maus inkl. Umlaut, kopiere es und füge es per CopyPaste in einen Texteditor ein (z.B. Notepad++)


In dem Fall den wir hier beschreiben ging es um ein ä

Der Screenshot des Texteditors zeigt, dass es kein richtiges ä ist, aber der Browser das als ä darstellt (keine Ahnung wie man das schafft).

image


Bei dem Kunden war es so, dass der String mit dem Fake-Umlaut aus Excel kam.

Vielleicht ist das auch bei dir so ein komischer Fall.





Wie kann ich herausfinden, was für Zeichen ist das ? Also jetzt sehe ich am Ende von jedem String [Problem]. trim hilft nicht..

Klingt nach Zeilenumbruch.

Probiermal diese Ansätze.


image


Um das mit Freemarker zu entfernen z.B.:


${Merkmalgruppe!?replace("\r\n?|\n","","r")}



Ich habe es . es geht um &nbsp;

Beim HTML parsen wurd mit importiert :)


Vielen Dank. Das Problem ist erledigt.

Wiede mal was gelernt....