我正在使用PDI Spoon并在脚本值中编写此脚本以获取值,检查和转换:
var cte;
cte = gera_cte (CTRC.getString(), Numero_CTe.getString());
function gera_cte (arg1, arg2)
{
if (arg2 == 0) {
return arg1.substring(3,9);
}
else
{
return arg2.substring(4,10);
}
}
但是当脚本读取最后一条记录时,会发生这种情况:
2016/02/05 17:28:40 - Gera Num Cte.0 - ERROR (version 5.0.1-stable, build 1 from 2013-11-15_16-08-58 by buildguy) : Erro inesperado
2016/02/05 17:28:40 - Gera Num Cte.0 - ERROR (version 5.0.1-stable, build 1 from 2013-11-15_16-08-58 by buildguy) : org.pentaho.di.core.exception.KettleValueException:
2016/02/05 17:28:40 - Gera Num Cte.0 - Javascript error:
2016/02/05 17:28:40 - Gera Num Cte.0 - TypeError: Cannot call method "substring" of null (script#12)
2016/02/05 17:28:40 - Gera Num Cte.0 -
2016/02/05 17:28:40 - Gera Num Cte.0 - at org.pentaho.di.trans.steps.scriptvalues_mod.ScriptValuesMod.addValues(ScriptValuesMod.java:457)
2016/02/05 17:28:40 - Gera Num Cte.0 - at org.pentaho.di.trans.steps.scriptvalues_mod.ScriptValuesMod.processRow(ScriptValuesMod.java:692)
2016/02/05 17:28:40 - Gera Num Cte.0 - at org.pentaho.di.trans.step.RunThread.run(RunThread.java:60)
2016/02/05 17:28:40 - Gera Num Cte.0 - at java.lang.Thread.run(Unknown Source)
2016/02/05 17:28:40 - Gera Num Cte.0 - Caused by: org.mozilla.javascript.EcmaError: TypeError: Cannot call method "substring" of null (script#12)
如何解决此问题,因为文件末尾?
答案 0 :(得分:2)
您的文件中可能还有一行,这使得它以null
值运行。
您可能应该在非法行到达Java Script步骤之前将其过滤掉,或者使用以下内容检查函数中的输入值:
function gera_cte (arg1, arg2)
{
if (arg1 == null) {
return arg1;
}
if (arg2 == 0) {
return arg1.substring(3,9);
}
else
{
return arg2.substring(4,10);
}
}
或在参数为空时设置trans_Status = SKIP_TRANSFORMATION;
。
答案 1 :(得分:0)
如果您使用"修改的Javascript值"执行此脚本步骤,你有这个错误,因为PDI使用的javascript引擎(Mozilla的Rhino引擎)没有"子串"方法。尝试使用" substr"代替:
// Perform the substring function
//
// Usage:
// substr(var, from);
// substr(var, from, to);
//
// 2007-01-25
//
var str1= "Hello Pentaho!";
var str2= substr(str1, 6);
var str3= substr(str1, 6, 7);
Alert("Input : " + str1);
Alert("From position 6: " + str2);
Alert("From position 6 for 7 long : " + str3);