ODI:如何在知识模块内的任务之间正确定义和传递变量?
ODI: How to correctly define and pass variables between tasks inside Knowledge Module?
我正在构建自定义 IKM,我需要在执行期间在内存中保留一些值。所以在第一个任务中,我尝试定义将在后续任务中使用的所有变量。
例如,我需要获取整数形式的会话编号。我是这样做的:
<%
int SESSIONID = Integer.parseInt(<?=odiRef.getSession("SESS_NO")?>);
%>
但我收到以下错误:
Parse error at line 2, column 17. Encountered: <
Pre-execution text:
int SESSIONID = 699;
out.print("");
这个
<%
String sessionNo = odiRef.getSession("SESS_NO");
int SESSIONID = Integer.parseInt(sessionNo);
%>
也不工作:
Sourced file: inline evaluation of: `` String sessionNo =
odiRef.getSession("SESS_NO"); Integer SESSIONID = Integer.pa . . . '' : Typed variable declaration : Method Invocation Integer.parseInt
Target error:
For input string: "707"
Pre-execution text:
String sessionNo = odiRef.getSession("SESS_NO");
int SESSIONID = Integer.parseInt(sessionNo);
out.print("");
Error text:
Integer .parseInt ( sessionNo )
我做错了什么?
第一次尝试:
<%
标签在 <?
标签之前 executed/substituted,因此 odiRef.getSession() 未被替换。我会在外部标签上使用 <$
或 <@
,所以它发生在替换之后。这个优秀博客末尾的更多信息:https://devepm.com/2014/09/16/odi-substitution-tags-demystified/
- 因为 odiRef.getSession() 将在其余代码执行之前被替换,所以它必须用双引号括起来才能被视为字符串。
- Integer.parseInt() returns 一个整数,所以我会把它存储到一个整数而不是整数中。如果要将其存储为整数,请改用 Integer.valueOf()。
尝试
<@
int SESSIONID = Integer.parseInt("<?=odiRef.getSession("SESS_NO")?>");
@>
在第二次尝试中,我不确定出了什么问题。会不会是<%
关时session还不可用?您可以通过在 Jython 上设置 KM step Technology 并使用此代码来调试它:
raise '<%=odiRef.getSession("SESS_NO")%>'
这会在运算符的错误消息中显示 SESS_NO 的值。
我正在构建自定义 IKM,我需要在执行期间在内存中保留一些值。所以在第一个任务中,我尝试定义将在后续任务中使用的所有变量。
例如,我需要获取整数形式的会话编号。我是这样做的:
<%
int SESSIONID = Integer.parseInt(<?=odiRef.getSession("SESS_NO")?>);
%>
但我收到以下错误:
Parse error at line 2, column 17. Encountered: <
Pre-execution text:
int SESSIONID = 699;
out.print("");
这个
<%
String sessionNo = odiRef.getSession("SESS_NO");
int SESSIONID = Integer.parseInt(sessionNo);
%>
也不工作:
Sourced file: inline evaluation of: `` String sessionNo =
odiRef.getSession("SESS_NO"); Integer SESSIONID = Integer.pa . . . '' : Typed variable declaration : Method Invocation Integer.parseInt
Target error:
For input string: "707"
Pre-execution text:
String sessionNo = odiRef.getSession("SESS_NO");
int SESSIONID = Integer.parseInt(sessionNo);
out.print("");
Error text:
Integer .parseInt ( sessionNo )
我做错了什么?
第一次尝试:
<%
标签在<?
标签之前 executed/substituted,因此 odiRef.getSession() 未被替换。我会在外部标签上使用<$
或<@
,所以它发生在替换之后。这个优秀博客末尾的更多信息:https://devepm.com/2014/09/16/odi-substitution-tags-demystified/- 因为 odiRef.getSession() 将在其余代码执行之前被替换,所以它必须用双引号括起来才能被视为字符串。
- Integer.parseInt() returns 一个整数,所以我会把它存储到一个整数而不是整数中。如果要将其存储为整数,请改用 Integer.valueOf()。
尝试
<@
int SESSIONID = Integer.parseInt("<?=odiRef.getSession("SESS_NO")?>");
@>
在第二次尝试中,我不确定出了什么问题。会不会是<%
关时session还不可用?您可以通过在 Jython 上设置 KM step Technology 并使用此代码来调试它:
raise '<%=odiRef.getSession("SESS_NO")%>'
这会在运算符的错误消息中显示 SESS_NO 的值。