ODI: KM Java BeanShell - 转义双引号
ODI: KM Java BeanShell - escape double quotes
我想在知识模块的任务中设置一个变量,目标技术设置为 Java BeanShell。该值表示映射表达式,其中源 table 在 MSSQL 数据库中。列名用双引号括起来,这会导致模板问题。
列表达式为:
source_tab."Entry Number"
任务(Java BeanShell)
<$
String SEL_COLS = "<%=odiRef.getColList(0, "", "[EXPRESSION]\t[ALIAS_SEP] [CX_COL_NAME]", ",\n\t", "", "")%>";
$>
此变量赋值失败,因为 source_tab."Entry Number" 中的 " 未转义 - 代码无法编译。
odiRef.getQuotedString没有解决问题...
如果生成的代码在 JBS 技术中作为最终代码执行,odiRef.getQuotedString
可能会有所帮助。当我们按以下方式使用它时(在?-、$-或@-替换中):
<$
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 函数不起作用,让我们自己编写:
<%
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", "", ""))%>;
$>
只有将 "
放入 JBS 替换中的 Java 文字的方法是与 Char 文字 '"'
或使用 '"'.toString()
表达式连接(如果不可能)使用 Char 类型。
最后:
在最终的 JBS 代码中,您可以使用 \"
,但只能在替换中使用 +'"'+
。
我想在知识模块的任务中设置一个变量,目标技术设置为 Java BeanShell。该值表示映射表达式,其中源 table 在 MSSQL 数据库中。列名用双引号括起来,这会导致模板问题。
列表达式为:
source_tab."Entry Number"
任务(Java BeanShell)
<$
String SEL_COLS = "<%=odiRef.getColList(0, "", "[EXPRESSION]\t[ALIAS_SEP] [CX_COL_NAME]", ",\n\t", "", "")%>";
$>
此变量赋值失败,因为 source_tab."Entry Number" 中的 " 未转义 - 代码无法编译。
odiRef.getQuotedString没有解决问题...
odiRef.getQuotedString
可能会有所帮助。当我们按以下方式使用它时(在?-、$-或@-替换中):
<$
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 函数不起作用,让我们自己编写:
<%
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", "", ""))%>;
$>
只有将 "
放入 JBS 替换中的 Java 文字的方法是与 Char 文字 '"'
或使用 '"'.toString()
表达式连接(如果不可能)使用 Char 类型。
最后:
在最终的 JBS 代码中,您可以使用 \"
,但只能在替换中使用 +'"'+
。