如果生成的代碼作爲JBS技術中的最終代碼執行,則odiRef.getQuotedString
可能會有所幫助。當我們使用它以下列方式(在 - ,$ - 或@ 3'-取代?):
<$
String SEL_COLS = <%=odiRef.getQuotedString(odiRef.getColList(0, "", "[EXPRESSION]\t[ALIAS_SEP] [CX_COL_NAME]", ",\n\t", "", ""))%>;
$>
則導致失敗,就像這樣:
... Caused by: org.apache.bsf.BSFException: BeanShell script error:
Parse error at line 3, column 37. Encountered: Entry BSF info: ....
... 11 more
Text: <$
String SEL_COLS = "SOURCE_TAB.\"Entry Number\" ENTRY_NUMBER";
$>.
這看起來不錯,但不起作用。它可以作爲JBS Technology的最終代碼(我指的是所有替代的結果)。不幸的是,任何替換都會使用反斜槓。
好吧,如果標準odiRef-functtion不起作用,讓我們自己寫的:
<%
String getQuotedStringCustomized(String s){
return '"'+s.replaceAll('"'.toString(),'"'+"+'"+'"'+"'+"+'"')+'"';
}
%>
-- other code........
<$
String SEL_COLS = <%=getQuotedStringCustomized(odiRef.getColList(0, "", "[EXPRESSION]\t[ALIAS_SEP] [CX_COL_NAME]", ",\n\t", "", ""))%>;
$>
只有把"
到Java的JBS換人內文字的方式是contatenation與字符文字'"'
或使用'"'.toString()
表達式如果不可能使用Char類型。
FINALLY:
在最後JBS代碼,你可以使用\"
,但換人內只有+'"'+
。
將雙引號連接爲一個字符指向正確的方向。我的情況有所改變,實際上我不得不在字符內部加雙引號,比如'\''。我真的不喜歡ODI如何處理這個問題 - 有時候模板感覺像是在一條腿上拍攝自己的感覺 – mayr
單引號是所以只有一個符號可以出現在內部,例如''X''是正確的,但'AB'是錯誤的。如果你使用'''',那麼它就等於''''' (沒有反斜槓),就像上面解釋的那樣ODI在JBS替換中「吃」了反斜槓 它發生在源代碼處理中 ODI總是將所有東西都翻譯成JBS代碼,再次打印代碼,然後真正執行代碼。 –