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 代码中,您可以使用 \",但只能在替换中使用 +'"'+