1

Talend DI ツールを使用してデータをマッピングしようとしています。その中で、条件演算子に関連する変換をキャプチャする必要があります (ツールの制限により、if-then-else 構文が許可されず、代わりに条件演算子がサポートされます。

サンプルデータ :

この式を talend tmap component に書き込もうとしています。三項演算子を使用して、この式を tmap コンポーネント式ビルダーに書き込む方法。さらに、null 値を確認する必要があります。

case when [TCode]='(00) PRE-PAID' then '00'when[TCode]='(01) C.O.D.' then '01'when[TCode]='(02) EOM' then '02'when[TCode]='10' then '(10) NET 10 DAYS'when[TCode]='15' then '(15) NET 15 DAYS'when[TCode]='21' then '(21) 2 % 30 NET 31'when[TCode]='23' then '(23) 2% NET 30 DAYS'when[TCode]='3' then '(3) CHECK'when[TCode]='30' then '(30) NET 30 DAYS' else [TCode]end as TCode

この条件演算子を試しました:

"(00) PRE-PAID".equals(row.tCode) ?"00"  :
 "(01) C.O.D".equals(row.tCode) ?"01" :
"(02) EOM".equals(row.tCode) ? "02" :
"Unknown"

条件演算子の上で試したときにエラーが発生しました:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    XML_API_tXMLMap_1 cannot be resolved to a type
    XML_API_tXMLMap_1 cannot be resolved to a type
    Syntax error on token ""(00) PRE-PAID"", delete this token

前もって感謝します !

4

1 に答える 1

1

分析

コメントのリンクによると、次のことを実行しようとします。

row1.tcode==null?null:row1.tcode.length()==0?null:row1.tcode.toUpperCase()
"(00) PRE-PAID".equals(row.tCode) ?"00"  :
"(01) C.O.D".equals(row.tCode) ?"01" :
"(02) EOM".equals(row.tCode) ? "02" :
"Unknown"

次のエラーが表示されます。

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    XML_API_tXMLMap_1 cannot be resolved to a type
    XML_API_tXMLMap_1 cannot be resolved to a type
    Syntax error on token ""(00) PRE-PAID"", delete this token

注: Java は大文字と小文字を区別する言語です。したがって、両方ではなく、 tcodeまたはtCodeのいずれかが正しいです。

説明

2 つの別々のコード行を提供しましたが、Java はこれを解釈する方法を知りません。

コードの最初の行は次のとおりです (通常は で終わります;):

row1.tcode==null?null:row1.tcode.length()==0?null:row1.tcode.toUpperCase()

コードの 2 行目 (それ自体は「1 行」と見なされますが、より多くの行があります) は次のとおりです。

"(00) PRE-PAID".equals(row.tCode) ?"00"  :
"(01) C.O.D".equals(row.tCode) ?"01" :
"(02) EOM".equals(row.tCode) ? "02" :
"Unknown"

この 2 つの命令をまとめる必要があります。

解決

(row1.tCode != null && !row1.tCode.equals("")) ? (
"(00) PRE-PAID".equals(row.tCode.toUpperCase()) ? "00" :
"(01) C.O.D".equals(row.tCode.toUpperCase()) ? "01" :
"(02) EOM".equals(row.tCode.toUpperCase()) ? "02" :
"Unknown") : "Unknown"

または、最初の行を短くするために、意味がある場合はデフォルト値を設定できます。tCodeデフォルト値は である可能性があり、もう""確認する必要はありnullません。繰り返しますが、これはユースケースによって異なります。

于 2016-06-27T08:00:10.000 に答える