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

我为 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}输入到 step 参数的字段中TimeMappingMeta.divisor,但是由于无法将字符串解析为整数,因此对话框将在确认时失败。该值仅在作业执行期间替换为实际参数值,我们无法将作业参数字符串保存在步骤参数中。


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


拉风的咖菲猫
浏览 96回答 1
1回答

浮云间

我得出的结论是,不可能对非字符串步骤参数使用变量替换。变量的值,例如${divisor},只能保存为字符串,即使值是逻辑整数。此外,变量字符串的替换不是自动的,必须在与方法一起使用值的地方显式执行BaseStep.environmentSubstitute。例如,在步骤的初始化中使用值如下所示:public boolean init(StepMetaInterface smi, StepDataInterface sdi) {&nbsp; &nbsp; TimeMappingMeta meta = (TimeMappingMeta) smi&nbsp; &nbsp; divisor = Integer.parseInt(environmentSubstitute(meta.getDivisor()));}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java