2016-04-27 26 views
0

Ich bin ziemlich neu in Talend und möchte einen Ausdruck aus einer bestimmten Datei lesen und dann in tMap-Funktion ausführen.Talend Open Data Integration: Lesen Sie Ausdrücke aus Excel-Datei und führen Sie sie dann in tMap

Die Ausdrücke werden in einer separaten Excel-Spalte wie folgt gespeichert:

((String) globalMap.get("row6.column_that_contains_expr")):

row7.value1 + row7.value2 == 0 ? 0 : row7.value1/(row7.value1 + row7.value2) 

ich es als eine Zeichenfolge, die durch globale Karte lesen erreicht.

Aber ich bin nicht in der Lage, den Ausdruck in tMap auszuführen, um den resultierenden Wert zu erhalten.

Meine Aufgabe sieht wie folgt aus:

tFileInputExcel = row6 => tFlowToIerate => tPostgresqlInput = row7 => tMap => tFileOutpuDelimited

Könnten Sie mir bitte sagen, wie die Expression von Datei auszuführen und erhalten die resultierende Doppel?

Grüße

Simon

Antwort

0

Was würde ich in der Regel tut, ist vor dem tFlowToIerate einer tJavaRow Komponente zu haben, wo ich die Werte in Kontextvariablen zuweisen würde und sie im tPostgresqlInput aus dem Kontext direkt verwenden

+0

Hört sich gut an! Ich überprüfe es später und halte dich auf dem Laufenden. – Simon

+0

Ich versuchte Folgendes in tJavaRow: ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine engine = mgr.getEngineByName ("JavaScript"); String infix = "row7.value1 + row7.value2 == 0? 0: row7.value1/(row7.value1 + row7.value2)"; context.test = engine.eval (infix); Was zu einem Fehler führt: javax.script.ScriptException: ReferenceError: "row7" ist nicht definiert in Any Ideas? – Simon

+0

Ja, wenn du in Talend klickst, bist du eigentlich Meta-Programmierer. Sie sagen Talend, um Code zu generieren. Was Sie im Infix definieren, ist eine Java-Formel, die Sie zur Interpretation an JavaScript übergeben. Sie können in Talend immer eigene Klassen und Methoden implementieren, die in der Lage sind, die Formel zu interpretieren, die Sie aus der Datei erhalten. – user853710