我想在知识模块的任务中设置一个变量,目标技术设置为Java BeanShell。该值表示映射EXPRESSIONs,其中源表位于MSSQL数据库中。列名称用双引号括起来,这会导致模板化问题。
列表达式为:
source_tab."Entry Number"
任务(Java BeanShell)
<$
String SEL_COLS = "<%=odiRef.getColList(0, "", "[EXPRESSION]\t[ALIAS_SEP] [CX_COL_NAME]", ",\n\t", "", "")%>";
$>
此变量赋值失败,因为“在source_tab中。”条目号“未转义 - 代码无法编译。
odiRef.getQuotedString无法解决问题...
答案 0 :(得分:2)
odiRef.getQuotedString
可以提供帮助。当我们以下列方式使用它时(在? - ,$ - 或@ -substitution中):
<$
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技术中的最终代码(我的意思是所有替换的结果)。不幸的是,任何替换都会出现反斜杠。
好的,如果标准的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", "", ""))%>;
$>
如果无法使用Char类型,只有将"
放入JBS替换中的Java文字的方法是使用Char文字'"'
或使用'"'.toString()
表达式进行连接。
最后:
在最终的JBS代码中,您可以使用\"
,但仅在替换内+'"'+
。