2016-10-03 4 views
1

Wir versuchen berechnetes Feld als Versanddatum if-then-else-Anweisung in Java mit Eclipse (Talend DI TOOL)Wie kann ich schreiben IF-ELSE-Anweisung in Java

Umwelt zu schreiben: wir versuchen, erstelle einen Job in Talend.

source systems (sql server and excel file)---->tmap---->Target system(Excel file) 

Eingangs Ausdruck: if-then-else Formel

Schiff Datum

if ([Customer])='0000001' or 
(TRIM([Corp Acct Name]))='GENERAL' or (TRIM([Corp Acct Name]))='ABC' or (TRIM([Corp Acct Name]))='XYZ' 
or (TRIM([Corp Acct Name]))='CDE' then ([ShipDate]) 
elseif DATEPART('weekday',([MABD])) =1 and [Total Lead Time]<=5 then (([MABD])-[Total Lead Time]-2) 
elseif DATEPART('weekday',([MABD])) =1 and [Total Lead Time]>5 then (([MABD])-[Total Lead Time]-4) 
elseif DATEPART('weekday',([MABD])) =2 and [Total Lead Time]<=1 then (([MABD])-[Total Lead Time]) 
elseif DATEPART('weekday',([MABD])) =2 and [Total Lead Time]<=6 then (([MABD])-[Total Lead Time]-2) 
elseif DATEPART('weekday',([MABD])) =2 and [Total Lead Time]>6 then (([MABD])-[Total Lead Time]-4) 
elseif DATEPART('weekday',([MABD])) =3 and [Total Lead Time]<=2 then (([MABD])-[Total Lead Time]) 
elseif DATEPART('weekday',([MABD])) =3 and [Total Lead Time]<=7 then (([MABD])-[Total Lead Time]-2) 
elseif DATEPART('weekday',([MABD])) =3 and [Total Lead Time]>7 then (([MABD])-[Total Lead Time]-4) 
elseif DATEPART('weekday',([MABD])) =4 and [Total Lead Time]<=3 then (([MABD])-[Total Lead Time]) 
elseif DATEPART('weekday',([MABD])) =4 and [Total Lead Time]<=8 then (([MABD])-[Total Lead Time]-2) 
elseif DATEPART('weekday',([MABD])) =4 and [Total Lead Time]>8 then (([MABD])-[Total Lead Time]-4) 
elseif DATEPART('weekday',([MABD])) =5 and [Total Lead Time]<=4 then (([MABD])-[Total Lead Time]) 
elseif DATEPART('weekday',([MABD])) =5 and [Total Lead Time]<=9 then (([MABD])-[Total Lead Time]-2) 
elseif DATEPART('weekday',([MABD])) =5 and [Total Lead Time]>9 then (([MABD])-[Total Lead Time]-4) 
elseif DATEPART('weekday',([MABD])) =6 and [Total Lead Time]<=4 then (([MABD])-[Total Lead Time]-1) 
elseif DATEPART('weekday',([MABD])) =6 and [Total Lead Time]<=9 then (([MABD])-[Total Lead Time]-3) 
elseif DATEPART('weekday',([MABD])) =6 and [Total Lead Time]>9 then (([MABD])-[Total Lead Time]-5) 
elseif DATEPART('weekday',([MABD])) =7 and [Total Lead Time]<=4 then (([MABD])-[Total Lead Time]-2) 
elseif DATEPART('weekday',([MABD])) =7 and [Total Lead Time]<=9 then (([MABD])-[Total Lead Time]-4) 
elseif DATEPART('weekday',([MABD])) =7 and [Total Lead Time]>9 then (([MABD])-[Total Lead Time]-6) 
END 

Wir haben versucht: Ternery Betreiber in Talend

row1.customer='0000001'|| trim(row1.CorpAcctName)='GENERAL'|| trim(row1.CorpAcctName)='ABC' or trim(row1.CorpAcctName)='XYZ or trim(row1.CorpAcctName)=='SCDE' ||?row1.ShipDate: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD)=1)-1) and row2.L+1<5?row1.MABD-row2.L+1-2: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=1)-1) and row2.L+1>5?row1.MABD-row2.L+1-4: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=2)-1) and row2.L+1<=1?row1.MABD-row2.L+1: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=2)-1) and row2.L+1<=6?row1.MABD-row2.L+1-2: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=2)-1) and row2.L+1>6?row1.MABD-row2.L+1-4: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=3)-1) and row2.L+1<=2?row1.MABD-row2.L+1: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=3)-1) and row2.L+1<=7?row1.MABD-row2.L+1-2: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=3)-1) and row2.L+1>7?row1.MABD-row2.L+1-4: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=4)-1) and row2.L+1<=3?row1.MABD-row2.L+1: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=4)-1) and row2.L+1<=8?row1.MABD-row2.L+1-2: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=4)-1) and row2.L+1>8?row1.MABD-row2.L+1-4: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=5)-1) and row2.L+1<=4?row1.MABD-row2.L+1: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=5)-1) and row2.L+1<=9?row1.MABD-row2.L+1-2: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=5)-1) and row2.L+1>9?row1.MABD-row2.L+1-4: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=6)-1) and row2.L+1<=4?row1.MABD-row2.L+1-1: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=6)-1) and row2.L+1<=9?row1.MABD-row2.L+1-3: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=6)-1) and row2.L+1>9?row1.MABD-row2.L+1-5: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=7)-1) and row2.L+1<=4?row1.MABD-row2.L+1-2: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=7)-1) and row2.L+1<=9?row1.MABD-row2.L+1-4: 
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=7)-1) and row2.L+1>9?row1.MABD-row2.L+1-6:"" 

Jede Hilfe zu, es würde sehr geschätzt werden?

+4

'Wenn-else' ist kein Ausdruck, es ist eine Aussage. Java hat keine "Routinen", was Sie meinen, ist höchstwahrscheinlich eine Methode. Ich würde ein Starter-Tutorial wie [dieses] (https://docs.oracle.com/javase/tutorial/java/index.html) empfehlen. – Turing85

Antwort

1

Zuerst haben Sie mehrere Syntaxfehler in Ihrem Ausdruck: Wenn Sie 2 Int vergleichen möchten, ist der richtige Operator "==". (Und wenn Sie zwei Zeichenfolgen vergleichen möchten, sollten Sie "0000001".equals(row1.customer) verwenden).

Dieser Ausdruck ist nicht sinnvoll:

Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=1)-1) 

wenn Sie wollen DAY_OF_WEEK bis 1 vergleichen, verwenden

(TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD)-1) ==1 

Dann roh Ternary Operator in einem tMap verwendet, ist vielleicht nicht die beste was zu tun ist: Es ist nicht wirklich geeignet für einen komplexen Ausdruck wie diesen (keine Kommentare verfügbar, keine Wiederverwendung möglich). Sie sollten stattdessen eine Methode im Abschnitt "Routine" erstellen und sie als Parameter row1.customer, row1.CorpAccctName, row1.ShipDate, row1.MABD angeben. In dieser Routine-Methode könnten Sie dann IF/ELSE-Operatoren verwenden, was Sie nicht direkt in tMap verwenden können.

public static int myFunction(String customer,String CorpAcctName,Integer ShipDate,Integer MABD) { 
//adding comment is possible here 
      if ("0000001".equals(customer).......) { 

Dann in tMap, müssen Sie nur Ihre Funktion im Ausdruck Konstruktor aufrufen.

+0

ist es möglich zu versuchen, eine andere Zeile in Ihrer öffentlichen Funktion hinzuzufügen. es wird mir sehr hilfreich sein. – NEO

+0

Ich versuchte öffentliche Funktion mit einem anderen, wenn ABER Geting Fehler bei der Ausführung der Routine nach Ihrer Richtung hier ist Link http://paste.ofcode.org/QeCgHQuawvJpHAsC2Pg76H – NEO

+0

Fehlermeldung besagt, dass setTime (Date) im Typ Kalender nicht anwendbar ist Für die Argumente (String): Sie sollten einen Date-Typ für param MABD verwenden, um TalendDate.getPartofDate() zu erhalten. – Corentin

Verwandte Themen