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

问题描述 投票:-1回答:2

enter image description here

大家好!我创造了一个像图片一样的水壶。现在,在“concat value”步骤中,我想使用它的“A,B”步骤metainfo,但我不知道如何得到它。你能帮助我吗?我可以获得映射输入步骤信息,但我不知道如何得到它的秘密步骤。我想获得“A,B”步骤信息。 TKS! “concat value”步骤代码:

//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();
pentaho kettle
2个回答
0
投票

我不知道子转换,但你可以使用这个修改的Java脚本值:

var last_step = _step_.getInputRowSets();

这将返回上一步的名称,后跟当前步骤的名称(Modified Java Script Value),您可以使用一些String清除/拆分步骤提取此值。

通过在它之前使用Dummy步骤,它输出此字符串:

[Dummy(什么都不做)2.0 - 修改过的Java Script Value.0]


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();
© www.soinside.com 2019 - 2024. All rights reserved.