我正在构建一个自定义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 )
我做错了什么?
答案 0 :(得分:2)
第一次尝试:
<%
标记在<?
标记之前执行/替换,因此odiRef.getSession()不会被替换。我会在外部标记上使用<$
或<@
,因此它会在替换后发生。更多信息在这篇优秀博客的末尾:https://devepm.com/2014/09/16/odi-substitution-tags-demystified/ 尝试
<@
int SESSIONID = Integer.parseInt("<?=odiRef.getSession("SESS_NO")?>");
@>
在第二次尝试中,我不确定是什么错。可能是会话在<%
通行证尚未提供吗?您可以通过在Jython上设置KM step Technology来调试它并使用以下代码:
raise '<%=odiRef.getSession("SESS_NO")%>'
这会在运算符的错误消息中显示SESS_NO的值。