如何将PDI作业变量/参数用于整数步长参数?

时间:2019-01-23 10:06:27

标签: java pentaho pentaho-spoon pentaho-data-integration

我已经为PDI编写了一个自定义步骤插件,并希望将作业变量/参数(例如,通过${divisor}访问)用作该步骤的整数输入参数。当我尝试使用内置插件执行此操作时,出现错误消息“无法打开此步骤的对话框:对于输入字符串“ $ {divisor}””。

我已经从官方演示步骤插件中改编了步骤插件,并确认如果所有步骤输入参数都被赋予了硬值,则该步骤通常可以正常工作。

有问题的整数参数在Meta类中定义为int,并具有适当的getter / setter方法,例如通过其XML表示形式进行了初始化。

在Dialog类中,参数表示为文本字段,在确认对话框并将值写入Meta类实例时,其值将解析为整数。

TimeMappingMeta.java的摘录

public class TimeMappingMeta extends BaseStepMeta implements StepMetaInterface {
    private int divisor;

    public void loadXML(Node stepnode, List<DatabaseMeta> databases, IMetaStore metaStore) throws KettleXMLException {
        setDivisor(Integer.parseInt(XMLHandler.getNodeValue(XMLHandler.getSubNode(stepnode, "divisor"))));
    }
}

TimeMappingDialog.java的摘录

public class TimeMappingDialog extends BaseStepDialog implements StepDialogInterface {
    private Text wDivisor;

    private void populateDialog() {
        wDivisor.setText("" + meta.getDivisor());
    }

    private void ok() {
        meta.setDivisor(Integer.parseInt(wDivisor.getText()));
    }
}

现在的问题是,可以在步骤参数${divisor}的字段中输入作业参数/变量TimeMappingMeta.divisor的字符串,但是对话框将在确认时失败,因为该字符串不能被解析为整数。该值仅在作业执行过程中被替换为实际参数值,我们无法将作业参数字符串保存在step参数中。

我想念什么吗?甚至可以将作业变量/参数用于非字符串步骤参数吗?也许我可以将所有步骤参数切换为字符串,并且仅在行开始通过时在执行期间解析整数值。但是为什么水壶甚至支持非字符串阶跃参数?

1 个答案:

答案 0 :(得分:0)

我得出的结论是,不可能对非String步骤参数使用变量替换。变量的值,例如${divisor},即使值在逻辑上是整数,也只能保存为字符串。

此外,变量字符串的替换不是自动的,必须在方法BaseStep.environmentSubstitute与值一起使用的情况下明确执行。例如,在步骤的初始化中使用值如下:

public boolean init(StepMetaInterface smi, StepDataInterface sdi) {
    TimeMappingMeta meta = (TimeMappingMeta) smi
    divisor = Integer.parseInt(environmentSubstitute(meta.getDivisor()));
}