Установите переменные в записи задания Javascript на корневом уровне

Мне нужно установить переменные в корневой области в одном задании для использования в другом задании. Первое задание имеет запись задания Javascript с операторами:

parent_job.setVariable("customers_full_path", "C:\\customers22.csv", "r");
true;

Но компиляция завершается ошибкой:

Не удалось скомпилировать javascript: org.mozilla.javascript.EvaluatorException: не удалось найти метод org.pentaho.di.job.Job.setVariable(строка,строка,строка). (# 2)

Как установить переменную на корневом уровне в записи задания Javascript?


person ps0604    schedule 12.12.2018    source источник


Ответы (1)


Извините за пассивную агрессию, но:

введите здесь описание изображения

Я не знаю, новичок ли вы в Pentaho, но самая распространенная ошибка новых пользователей с предыдущими знаниями в области программирования — быть своего рода «зависимым» от знания методов, поэтому вы используете JavaScript для функциональности, которая встроенный в инструмент. Преобразования (KTR) и задания (KJB) имеют одинаковый шаг, вы можете лучше управлять им в KTR.

Шаги JavaScript значительно замедляют поток, поэтому старайтесь держаться от них как можно дальше.

РЕДАКТИРОВАТЬ:

Читая эту статью, кажется, что единственное, что вы делаете неправильно, это фактический синтаксис команды. Правильное использование:

parent_job.setVariable("Требуемое значение", [имя_переменной]);

Описанная вами команда имеет 3 параметра, хотя должно быть 2. Если вам нужно установить более 1 переменной, используйте команду 3 раза. Попробуйте посмотреть, работает ли это.

person Cristian Curti    schedule 13.12.2018
comment
Кристиан, код в вопросе представляет собой упрощение реального случая, когда у меня есть несколько вложенных if/else и которые я не могу решить с помощью Set Variables. Знаете ли вы, как установить переменную в корневой области в записи задания Javascript? - person ps0604; 14.12.2018
comment
Отредактировал мой ответ с возможным новым решением. - person Cristian Curti; 14.12.2018
comment
Тогда единственное решение, которое я вижу, заключается в том, что, поскольку вы используете JavaScript для нескольких тестов IF, это использовать этот сценарий в преобразовании и использовать результат на шаге установки переменных, используя параметр «Действителен в корневом задании». Поскольку в JavaScript вы можете устанавливать переменные только в _entry_(текущая работа) или pentaho_job (родительская работа). - person Cristian Curti; 14.12.2018
comment
Вот как я это решил, я создал функцию getRoot() в скрипте для возврата корня, затем я делаю цикл var parent = parent_job.getParentJob();, пока родитель не станет нулевым, это означает, что я в корне. ` - person ps0604; 14.12.2018