2016-02-05 6 views
1

Я использую ППД Ложка и написал этот сценарий в Values ​​Script, чтобы получить значения, проверить и преобразование:Ошибка Не удается вызвать метод «подстроки» нулевых значений Script - PDI

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) 

Как решить эту проблему, потому что она находится в конце файла?

ответ

1

У вас, вероятно, есть дополнительная строка в вашем файле, что заставляет ее работать с 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; если аргументы равны нулю.

+0

Уверенный приятель, у меня есть дополнительная строка в конце, и я не видел, но ваш скрипт решает мою проблему. Благодарю. – thiagofred

+0

Рад, что вы его исправили. – bolav

0

Если вы выполняете этот скрипт, используя шаг «Измененное значение JavaScript», у вас есть эта ошибка, потому что механизм javascript, который использует PDI (движок Rhino Mozilla), не имеет метода «подстроки». Вместо этого попробуйте использовать «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);