Oracle ODI:KM Java BeanShell-转义双引号

Oracle ODI:KM Java BeanShell-转义双引号,oracle,oracle-data-integrator,Oracle,Oracle Data Integrator,我想在知识模块的任务中设置一个变量,目标技术设置为JavaBeanshell。该值表示映射表达式,其中源表位于MSSQL数据库中。列名被双引号包围,这会导致模板设置问题 列表达式为: source_tab."Entry Number" 任务(Java BeanShell) 此变量赋值失败,因为“在源代码选项卡中。”条目号“未转义-代码未编译 odiRef.getQuotedString不能解决问题…odiRef.getQuotedString如果生成的代码作为JBS技术中的最终代码执行,则

我想在知识模块的任务中设置一个变量,目标技术设置为JavaBeanshell。该值表示映射表达式,其中源表位于MSSQL数据库中。列名被双引号包围,这会导致模板设置问题

列表达式为:

source_tab."Entry Number"
任务(Java BeanShell)


此变量赋值失败,因为“在源代码选项卡中。”条目号“未转义-代码未编译


odiRef.getQuotedString不能解决问题…

odiRef.getQuotedString
如果生成的代码作为JBS技术中的最终代码执行,则可能会有所帮助。当我们以以下方式使用它时(在?-、$-或@-替换中):


然后结果如下所示:

... 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";
$>.
…由以下原因引起:org.apache.bsf.bsfeexception:BeanShell脚本错误:
第3行第37列的分析错误。遇到:条目BSF info:。。。。
…还有11个
文本:。
这看起来不错,但不起作用。它可以作为JBS技术中的最终代码(我是指所有替换的结果)使用。不幸的是,任何替换都会产生反斜杠

好的,如果标准的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 literal
'”
或使用
'”.toString()
表达式(如果无法使用Char type)

最后:


在最终的JBS代码中,您可以使用
\“
,但在替换中,只能使用
+'“+

将双引号连接起来,作为一个字符为我指明了正确的方向。我的情况有点变化,实际上我不得不在char本身中避开双引号,就像'\"'. 我真的不喜欢ODI处理这件事的方式——有时候模板制作感觉就像是在射自己的腿。单引号是文字。因此,内部只能出现一个符号。例如,
'X'
是正确的,但是
'AB'
是错误的。如果使用
“\”
,则它相当于
(无反斜杠)。如上所述,ODI在JBS替换中“吃”反斜杠。这是源代码处理的结果。ODI总是将所有内容转换为JBS代码,然后再次打印代码,然后再执行。因此,我如何告诉beanshell实际执行一个必须在字符串中包含双引号的代码?
... 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";
$>.
<%
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", "", ""))%>;
$>