如何在子转换中获取输入步骤的信息

时间:2019-02-22 06:52:40

标签: pentaho kettle

enter image description here

大家好! 我已经创建了一个水壶跨图片。 现在,在“ concat值”步骤中,我想使用其“ A,B”步骤元信息,但我不知道如何获得它。您能帮帮我吗。 我可以获取映射输入步骤信息,但是我不知道如何获取其私有步骤 我想获取“ A,B”步骤信息。 Tks! “ concat值”步骤代码:

//Script here

function format() {
    var args = arguments;
    return this.replace(/\{(\d+)\}/g, function (m, i) {
        return args[i * 1 - 1];
    });
}
function getArr() {
    var fs = getVariable('fields', '');
    var arr = fs.split(',');
    var varr = [];
    for (var j = 0; j < arr.length; j++) {
        for (var i = 0; i < getInputRowMeta().size(); i++) { //loop through the actual row

            // Grab the metadata for this value
            //
            var valueMeta = getInputRowMeta().getValueMeta(i);

            //using the IDs instead of "String" would make it faster, see API for the IDs
            //
            if (valueMeta.getName().equals(arr[j])) { //only for String types
                varr.push(row[i]);
                break;
            }

        }

    }
    return varr;

}
function getwww() {
    var trans = _step_.getTrans();
    if (trans == null) {
        return 'err';
    }
    var transmeta = trans.getTransMeta();
    if (transmeta == null) {
        return 'err';
    }
    var minput = trans.findMappingInput();
    if (minput == null) {
        return 'err';
    }
    var arrs = transmeta.getPrevStepNames(minput[0].getStepMeta());
    var arr2 = [];
    var rowset = minput[0].getInputRowSets()
        for (var i = 0; i < rowset.length; i++) {
            arr2.push(rowset[i].getName());
        }

        return arr2.join('/');
}
var result = format.apply(getVariable('format', ''), getArr());
var pname = getwww();

2 个答案:

答案 0 :(得分:0)

我不知道子转换,但是您可以通过以下方式使用修改后的Java脚本值:

var last_step = _step_.getInputRowSets();

这将返回上一步的名称,后跟当前步骤的名称(修改后的Java脚本值),您可以通过几个“字符串清理/拆分”步骤来提取该值。

通过将其与虚拟步骤一起使用,它会输出以下字符串:

[虚拟(不执行任何操作)2.0-修改的Java脚本Value.0]

答案 1 :(得分:0)

我找到了解决问题的方法。 //在这里编写脚本

function getSubPreStepName() {
    var trans = _step_.getTrans();
    if (trans == null) {
        return 'err';
    }
    var transpar = trans.getParentTrans();
    if (transpar == null) {
        return 'err';
    }
    var transmeta = trans.getTransMeta();
    if (transmeta == null) {
        return 'err';
    }
    var ptransmeta = transpar.getTransMeta();
    var arrs = trans.toString().split("\\.");
    var subname = arrs[arrs.length - 2].replace('\[', '').replace('\]', '');
    var topstep = ptransmeta.findStep(subname)
        return ptransmeta.getPrevStepNames(topstep)[0];
}
var pname = getSubPreStepName();