错误无法调用脚本值中 null 的方法 "substring" - PDI
Error Cannot call method "substring" of null in Script Values - PDI
我正在使用 PDI Spoon 并在 Script Values 中编写此脚本以获取值、检查和转换:
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)
我该如何解决这个问题,因为在文件末尾?
您的文件中可能有一个额外的行,这使得它 运行 具有 null
值。
您可能应该在非法行到达您的 Java 脚本步骤之前过滤掉它们,或者使用类似以下内容检查函数中的输入值:
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;
。
如果您使用 "Modified Javascript Value" 步骤执行此脚本,则会出现此错误,因为 PDI 使用的 javascript 引擎(Mozilla 的 Rhino 引擎)没有 "substring"方法。尝试使用 "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);
我正在使用 PDI Spoon 并在 Script Values 中编写此脚本以获取值、检查和转换:
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)
我该如何解决这个问题,因为在文件末尾?
您的文件中可能有一个额外的行,这使得它 运行 具有 null
值。
您可能应该在非法行到达您的 Java 脚本步骤之前过滤掉它们,或者使用类似以下内容检查函数中的输入值:
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;
。
如果您使用 "Modified Javascript Value" 步骤执行此脚本,则会出现此错误,因为 PDI 使用的 javascript 引擎(Mozilla 的 Rhino 引擎)没有 "substring"方法。尝试使用 "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);